Я пытаюсь заставить работать следующий маршрут:
$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?
Я проверил все возможности, указанные в документации маршрутизатора, и даже взглянул на реализация роутера для 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');
Другими словами, это кажется мне ошибкой. Не стесняйтесь сообщить об ошибке расследовать дальше.
Насчет параметра языка, я не знаю, видел ли ты уже этот вопрос, но вы можете справиться с этим аналогичным образом.
Других решений пока нет …