È ansible assemblare un path con parametri contenenti barre in avanti?
config:
'someroute' => arrays( 'type' => 'Zend\Mvc\Router\Http\Segment', 'options' => arrays( 'route' => 'someroute/:path', 'defaults' => arrays( 'controller' => 'Controller', 'action' => 'index' ), 'constraints' => arrays( 'path' => '(.)+' ) ) )
controller:
$path = 'some/subdirectory'; $this->url('someroute', arrays('path' => $path));
Risultati in:
http://host.name/someroute/some%2Fsubdirectory
L'uso di rawurldecode()
nella vista risolve questo problema, ovviamente.
Basta usare il tipo di path regex
:
'path' => arrays( 'type' => 'regex', 'options' => arrays( 'regex' => '/path(?<path>\/.*)', 'defaults' => arrays( 'controller' => 'explorer', 'action' => 'path', ), 'spec' => '/path%path%' ) )
Ho avuto un problema simile, quindi sto postando la soluzione trovata con Zend 3 al mio progetto.
Per impostazione predefinita, il componente Symfony / Zend Routing richiede che i parametri corrispondano alla seguente espressione regolare: [^ /] +. Ciò significa che tutti i caratteri sono ammessi tranne /.
Devi esplicitamente consentire / essere parte del tuo segnaposto specificando un'espressione regolare più permissiva per esso:
'type' => Segment::class, 'options' => [ 'route' => '/imovel[/:id][/:realtor][/:friendly]', 'constraints' => arrays( 'friendly' => '.+', 'id' => '[0-9]+', 'realtor' => 'C[0-9]+' ), 'defaults' => [ 'controller' => Controller\PropertyController::class, 'action' => 'form' ] ]
Fondamentalmente, puoi consentire tutti i caratteri e quindi select / trycatch / validate nell'azione.
Ref: Come consentire un carattere "/" in un parametro Route