Параметры маршрута ZF2 с косой чертой
Можно ли построить маршрут с параметрами, содержащими прямые косые черты?
Config:
'someroute' => array(
'type' => 'ZendMvcRouterHttpSegment',
'options' => array(
'route' => 'someroute/:path',
'defaults' => array(
'controller' => 'Controller',
'action' => 'index'
),
'constraints' => array(
'path' => '(.)+'
)
)
)
Контроллер:
$path = 'some/subdirectory';
$this->url('someroute', array('path' => $path));
Приводит к:
http://host.name/someroute/some%2Fsubdirectory
3 ответа:
Просто используйте Тип маршрута
regex
:'path' => array( 'type' => 'regex', 'options' => array( 'regex' => '/path(?<path>\/.*)', 'defaults' => array( 'controller' => 'explorer', 'action' => 'path', ), 'spec' => '/path%path%' ) )
У меня была похожая проблема, поэтому я публикую найденное решение с Zend 3 в своем проекте.
По умолчанию компонент маршрутизации Symfony/Zend требует, чтобы параметры соответствуют следующему регулярному выражению: [^/]+. Это средство что все символы разрешены, кроме /.
Вы должны явно разрешить / быть частью вашего заполнителя с помощью указание более разрешающего регулярного выражения для него:
'type' => Segment::class, 'options' => [ 'route' => '/imovel[/:id][/:realtor][/:friendly]', 'constraints' => array( 'friendly' => '.+', 'id' => '[0-9]+', 'realtor' => 'C[0-9]+' ), 'defaults' => [ 'controller' => Controller\PropertyController::class, 'action' => 'form' ] ]
В принципе, вы можете разрешить все символы, а затем проверьте / trycatch / validate в действии.