Добавить необязательный параметр в Zend route по умолчанию - PullRequest
0 голосов
/ 07 октября 2011

Я хочу изменить маршрут по умолчанию в своем приложении, чтобы использовать дополнительный параметр через Bootstrap.php, а не в application.ini. У меня возникают проблемы с настройкой всех маршрутов побега, я даже не знаю, нужно ли мне настроить несколько маршрутов или я могу сделать только один!

Маршрут должен быть примерно таким:

":module/:area/:controller/:action"

где: область является необязательной и по умолчанию имеет значение "public"

Так что при любом доступе к http://www.example.com/my_module/my_controller/my_action я могу получить через плагин FC следующее:

$request->getParam('area') = "public"

А в http://www.example.com/my_module/my_area/my_controller/my_action я получаю:

$request->getParam('area') = "my_area"

Основная проблема заключается в создании всех маршрутов, поэтому он переходит к модулю по умолчанию, index controller и действиям index в случае, если они не переданы и загружаются http://www.example.com/ возвращает так же, как http://www.example.com/default/public/index/index.

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

Редактировать: я полагал, что Маршрут по умолчанию поставляется с отказоустойчивым модулем, если он не существует, по умолчанию используется контроллер, но как имитировать подобное поведение для других частей URL и модуля сам при создании его в Bootstrap.

Может кто-нибудь подсказать мне или подсказать, где найти рабочий пример?

Ответы [ 2 ]

1 голос
/ 08 октября 2011

Решением действительно было расширение Zend_Controller_Router_Route_Abstract и создание нового обработчика маршрута для прохождения URL-адреса, проверки существования модулей, областей, контроллеров и действий для создания полнофункционального URL-адреса или отправки на контроллер ошибок.

Тяжелая работа выполняется между методами match() и assemble(), и я использовал в качестве ссылки класс Zend Zend_Controller_Router_Route_Module, который выполняет аналогичную задачу для модуля, но вместо проверки, существует ли модуль с диспетчеромЯ создал белый список разрешенных областей, если он не совпадает, он считает, что эта часть пути является контроллером, следующее действие и другие части являются параметрами.

Работает как по волшебству!

1 голос
/ 07 октября 2011

Вы можете расширить Zend_Controller_Router_Rewrite и изменить настройки маршрутизатора по умолчанию и сборку URL-адреса, а затем использовать ->setRouter() на Zend_Controller_Front, чтобы использовать новый экземпляр маршрутизатора вместо значения по умолчанию. Найдите class Zend_Controller_Router_Rewrite и изучите его, прежде чем делать это.

...