Фильтрация запросов в Zend Router

Я новичок в том, что касается написания роутеров Zend. Я хочу направить все запросы формы

/: имя пользователя для контроллера => пользователь и профиль действия =>. Уловка в том, что я хочу иметь возможность отфильтровать: имя пользователя будет перенаправлено. т.е. я хочу фильтровать имена пользователей, которые будут маршрутизироваться.

Самый основной и важный фильтр, который я хочу применить, заключается в том, что если: username совпадает с каким-либо существующим именем контроллера, он не должен перенаправляться в /user/profile.

Любая помощь по этому вопросу будет принята с благодарностью. Благодарю.

1 ответ

Решение

Вот несколько советов, которые должны привести вас туда, где вы хотите быть:

  1. Маршруты агрегируются в стек, поэтому они LIFO (последний пришел, первый вышел). Это означает, что ваш маршрут с наивысшим приоритетом должен быть определен последним. Для этого конкретного сценария вы хотите, чтобы ваш /:username route был указан ранее, поэтому он имеет более низкий приоритет. Это позволит вашим первым существующим маршрутам проложить маршрут в первую очередь.
  2. Вы упомянули, что хотите "отфильтровать": имя пользователя будет перенаправлено. У вас есть статический список имен пользователей? Если это так, вы можете использовать маршрут Regex и сделать (username1|username2|...). Если вы ищете имена пользователей через базу данных, вам нужно создать собственный класс маршрута, который запрашивает вашу базу данных.
  3. Кроме того, вы можете просто использовать маршрут на основе шаблона, но затем выполнить фильтрацию в плагине фронт-контроллера.

ПРИМЕЧАНИЕ. Если вы выберете опцию №3, вам следует начать следующее:

$router       = Zend_Controller_Front::getInstance()->getRouter();
$matchedRoute = $router->getCurrentRouteName();

Вы будете действовать в зависимости от названия маршрута. Если это не имя маршрута, которое определяет /:username route, тогда игнорируйте. Если он совпадает, найдите имя пользователя и фильтр.

Другие вопросы по тегам