Переопределить маршрут по умолчанию, но вызвать его при необходимости - PullRequest
3 голосов
/ 05 марта 2010

Я занимаюсь разработкой сайта с такими URL:

site.com/james
site.com/james/photos

Схема для этих URL-адресов: site.com/USERNAME/APPLICATION

Имена пользователей, и имена приложений проверяются из логики программы db yb. Я установил для этого маршрут, но Zend направляет все запросы на этот маршрут.

Но есть те же контроллеры и модуль администратора. Когда я захожу на site.com/admin, он ищет имя пользователя «admin». Или когда я захожу на site.com/james/profile, он пытается найти приложение с именем «profile». Но в UserController для этого есть действие.

Как я могу реализовать эту функцию? Например, фронт-контроллер, который ищет имена контроллеров и отправляет запрос на них, если контроллер существует?

Ответы [ 3 ]

2 голосов
/ 05 марта 2010

Обратите внимание на переопределение метода Zend_Controller_Action __call($method, $args), который вызывается, если нужное действие не может быть найдено. Вы можете поместить свою логику проверки site.com/USERNAME/APPLICATION в метод __call, скажем, контроллера по умолчанию (или там, где это наиболее целесообразно) и вернуться к использованию маршрута по умолчанию.

2 голосов
/ 05 марта 2010

Как правило, если вы сделаете это, вам придется впоследствии восстановить маршруты по умолчанию, чтобы они работали. Это буквально означает добавление маршрута, который соответствует / admin и идет в модуль администратора.

Это скоро станет проблемой, если ваше приложение достаточно большое. Вы можете упростить задачу, изменив свои схемы URL на что-то вроде site.com/user/james и site.com/user/james/photos.

Одна альтернатива, которую я использую для веб-сайтов, управляемых контентом, - перенаправить все запросы, которые не соответствуют существующему контроллеру, на контроллер / действие по умолчанию:

$front->setParam('useDefaultControllerAlways', true);

По умолчанию невыбираемые запросы сопоставляются с IndexController :: indexAction

0 голосов
/ 05 марта 2010

Я бы использовал цепочка маршрутов . Удалите маршруты по умолчанию и добавьте их в конец цепочки.

В конечном итоге плагин фронт-контроллера для обработки условий.

...