Zend Framework 2: перехватить все маршруты и URL-адреса

Я пытаюсь создать или найти маршрут, который практически всех уловит. Мне нужно что-то, что может маршрутизировать что-то вроде следующего:

/some-page/some-childpage/another-childpage
/another-page
/yet-anotherpage/page

Эти URL-адреса не будут связаны с каким-либо модулем как таковым, они больше для того, чтобы администратор мог создавать страницы по любому URL-адресу.

У меня есть кое-что, что на данный момент перехватывает маршруты, используя маршрутизацию с подстановочными знаками и дочерний маршрут с подстановочными знаками, но когда я использую его в помощнике просмотра URL-адресов, он кодирует косые черты в параметре url. В основном:

$this->url( 'public_page', array( 'url' => 'foo/bar' ) )

Выводит /foo%2Fbar.

Помимо запрета / s, при попытке получить параметр url он возвращает строку запроса до первого /.

Любая помощь и предложения были бы замечательными!

С уважением, Майкл


person L4DD13    schedule 02.01.2013    source источник
comment
Я пробовал создавать URL-адреса, потому что у меня есть постоянные ссылки, содержащие косые черты, но они экранируются, когда URL-адрес собирается из помощника URL-адреса. Есть нечто похожее: stackoverflow.com/questions/16734810/ < / а>. Это то же испытание, что и экранирование ярлыков в формах.   -  person guessimtoolate    schedule 26.05.2014


Ответы (1)


Я не уверен, что вы могли бы сделать это с произвольным количеством сегментов. Вы можете указать сегментный маршрут с максимальным количеством сегментов, которые вы ожидаете, а затем просто разрешить им все быть необязательными, но это кажется грязным способом сделать это, если вы пытаетесь использовать много сегментов.

'route' => '/:controller[[[[/:action]/:third]/:fourth]/:fifth]',
    'constraints' => array(
        'controller' => '[a-zA-Z][a-zA-Z0-9_-]+',
        'action'     => '[a-zA-Z][a-zA-Z0-9_-]+',
    ),
    'defaults' => array(
        'controller' => 'Application\Controller\IndexController',
        'action'     => 'index',
        'third'      => 'something',
        'fourth'     => 'something-else',
    ),

Возможно, вы могли бы что-то сделать с маршрутом Regex, но, опять же, это, вероятно, также неприятно.

http://framework.zend.com/manual/2.0/en/modules/zend.mvc.routing.html#zend-mvc-router-http-regex

Я бы, вероятно, предложил использовать лучшую структуру URL-адресов, поскольку такие глубокие URL-адреса в любом случае не очень хороши.

person Andrew    schedule 13.02.2013