Параметры маршрута ZF2 с косой чертой


Можно ли собрать маршрут с параметрами, содержащими прямые косые черты?

Конфигурация:

'someroute' => array(
       'type' => 'Zend\Mvc\Router\Http\Segment',
       '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
Author: blackbishop, 2013-05-24

3 answers

Использование rawurldecode() в представлении, конечно, решает эту проблему.

 2
Author: machete, 2015-04-16 16:08:16

Просто используйте тип маршрута regex:

'path' => array(
    'type' => 'regex',
    'options' => array(
        'regex' => '/path(?<path>\/.*)',
        'defaults' => array(
            'controller' => 'explorer',
            'action' => 'path',
        ),
        'spec' => '/path%path%'
    )
)
 1
Author: MonkeyMonkey, 2015-04-16 16:09:05

У меня была похожая проблема, поэтому я публикую найденное решение с 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'
                    ]
                ]

В принципе, вы можете разрешить все символы, и затем проверьте/попробуйте поймать/проверить в действии.

Ссылка: Как разрешить символ "/" в параметре маршрута

 1
Author: Claudionor Oliveira, 2017-09-21 20:03:53