Parametri del path ZF2 con barra

È 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