Генератор URL Phalcon смешивает параметры в пользовательском маршруте

Я пытаюсь заставить работать следующий маршрут:

$router->add('/([a-z]{2})/:namespace/:controller/:action/([^\/]+)', array(
'language' => 1,
'namespace' => 2,
'controller' => 3,
'action' => 4,
'location' => 5
))->setName('location');

Соответствующая (и только для целей тестирования) строка в шаблоне Volt выглядит следующим образом:

{{  url({'for': 'location', 'namespace': 'weather', 'controller': 'forecast', 'action': 'precipitation', 'location': 'Hamburg' }) }}

Что я хочу это // погода / прогноз / осадки / Hamburg но вместо этого все, что я получаю, // погода / прогноз / осадки /.

Следующее, что я попробовал, было

$router->add('/([a-z]{2})/:namespace/:controller/:action/{location:[^\/]+}', array(
'language' => 1,
'namespace' => 2,
'controller' => 3,
'action' => 4,
))->setName('location');

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

Теперь я посмотрел в Library \ Mvc \ Router и массив, который передается получить() выглядит хорошо для меня:

Array
(
[for] => location
[namespace] => weather
[controller] => forecast
[action] => precipitation
[location] => Hamburg
[language] => en
)

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

Есть идеи, как заставить работать параметр location?

1

Решение

Я проверил все возможности, указанные в документации маршрутизатора, и даже взглянул на реализация роутера для Phalcon 2.0 (вы используете эту версию, верно ?!). Единственное, что сработало, — это вообще не использовать именованные параметры, даже встроенные заполнители нужно было удалить из шаблона маршрута:

$this->add('/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_]+)/([^\/]+)', array(
'namespace' => 1,
'controller' => 2,
'action' => 3,
'location' => 4,
))->setName('location');

Другими словами, это кажется мне ошибкой. Не стесняйтесь сообщить об ошибке расследовать дальше.

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]