Фильтрация запросов в Zend Router
Я новичок в том, что касается написания роутеров Zend. Я хочу направить все запросы формы
/: имя пользователя для контроллера => пользователь и профиль действия =>. Уловка в том, что я хочу иметь возможность отфильтровать: имя пользователя будет перенаправлено. т.е. я хочу фильтровать имена пользователей, которые будут маршрутизироваться.
Самый основной и важный фильтр, который я хочу применить, заключается в том, что если: username совпадает с каким-либо существующим именем контроллера, он не должен перенаправляться в /user/profile.
Любая помощь по этому вопросу будет принята с благодарностью. Благодарю.
1 ответ
Вот несколько советов, которые должны привести вас туда, где вы хотите быть:
- Маршруты агрегируются в стек, поэтому они LIFO (последний пришел, первый вышел). Это означает, что ваш маршрут с наивысшим приоритетом должен быть определен последним. Для этого конкретного сценария вы хотите, чтобы ваш /:username route был указан ранее, поэтому он имеет более низкий приоритет. Это позволит вашим первым существующим маршрутам проложить маршрут в первую очередь.
- Вы упомянули, что хотите "отфильтровать": имя пользователя будет перенаправлено. У вас есть статический список имен пользователей? Если это так, вы можете использовать маршрут Regex и сделать (username1|username2|...). Если вы ищете имена пользователей через базу данных, вам нужно создать собственный класс маршрута, который запрашивает вашу базу данных.
- Кроме того, вы можете просто использовать маршрут на основе шаблона, но затем выполнить фильтрацию в плагине фронт-контроллера.
ПРИМЕЧАНИЕ. Если вы выберете опцию №3, вам следует начать следующее:
$router = Zend_Controller_Front::getInstance()->getRouter();
$matchedRoute = $router->getCurrentRouteName();
Вы будете действовать в зависимости от названия маршрута. Если это не имя маршрута, которое определяет /:username route, тогда игнорируйте. Если он совпадает, найдите имя пользователя и фильтр.