Дополнительные сегменты ZF1 Zend_Controller_Router_Route

У меня есть проблемы с Zend_Controller_Router_Route. У меня есть следующий URL-адрес в стандартной нотации модуля/контроллера/действия:

http://www.mysite.com/rent/index/region/myregion/town/mytown/district/mydistrict/filter_params/filter_values

модуль: аренда контроллер: индекс

параметры: область, город, район

filter_params — это еще несколько параметров разбиения на страницы и элементы детализации.

Я хочу сократить его до: http://www.mysite.com/rent/myregion/mytown/mydistrict/filter_params/filter_values/

Но они тоже должны работать

http://www.mysite.com/rent/myregion/mytown/filter_params/filter_values

http://www.mysite.com/rent/myregion/filter_params/filter_values

Я пробовал этот маршрут

$myRoute = new Zend_Controller_Router_Route(
    'rent/:region/:town/:district/*',
     array(
         'controller' => 'rent',
         'action' => 'index'
     )
);
$router->addRoute('rent', $myRoute);

Это работает: http://www.mysite.com/rent/myregion/mytown/mydistrict

эти терпят неудачу

http://www.mysite.com/rent/myregion/mytown

http://www.mysite.com/rent/myregion

Action 'myregion' does not exist and was not trappend in __call()

Как я могу объявить другие маршруты и что произойдет со всеми другими параметрами, когда у меня есть маршрут типа http://www.mysite.com/rent/myregion/mytown/filter_params/filter_values

Спасибо за помощь!


person Jesse    schedule 31.10.2013    source источник


Ответы (1)


Это потому, что вы добавили маршрут, который соответствует rent/:region/:town/:district/, а два других условия не соответствуют этому правилу. Вам нужно создать маршруты для

rent/:region/ rent/:town/

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

person Robert    schedule 31.10.2013
comment
Спасибо, Роберт. Это помогло. Теперь у меня есть каскад маршрутов, начиная с самого длинного маршрута и заканчивая самым коротким. Таким образом, все маршруты будут согласованы. - person Jesse; 05.11.2013