Я определил некоторые маршруты в файле route.ini для простого приложения Q & A:
; e.g. /5/slug-of-the-title
routes.show_question.route = ":id/:slug"
routes.show_question.defaults.controller = "questions"
routes.show_question.defaults.action = "get"
routes.show_question.defaults.slug = null
; e.g. /ask
routes.ask.route = "ask"
routes.ask.defaults.controller = "questions"
routes.ask.defaults.action = "new"
; .. below this, similar route patterns e.g. "register", "login", etc
Теперь это работает, я могу получить доступ к следующим путям моего приложения:
/5/slug-of-the-title
/5
/ask
/register
/login
Однако он работает только в том случае, если в верхней части объявлен ": id/: slug". В противном случае я получаю сообщение об ошибке "id не указан". Я думал, что дно будет иметь смысл, так как другие маршруты не совпадают (/5 не соответствует "спросить"), но, похоже, верхнее значение получилось. Почему это?
Кроме того, маршруты, которые ранее работали, такие как /account (который по умолчанию использовался для контроллера учетной записи и действия индекса), больше не работают. Должен ли я объявлять все предыдущие маршруты по умолчанию? Я надеялся просто объявить исключительные маршруты и оставить остальных по умолчанию (: controller/: action).
Кстати, я попытался объявить маршрут "поймать все":
; catch all
routes.ask.route = ":controller/:action"
routes.ask.defaults.controller = "index"
routes.ask.defaults.action = "index"
Я думал, что логическое место, чтобы объявить это, станет дном снова. Мое понимание заключалось в том, что Zend попытается сопоставить маршруты в сценарии, а когда ни один не будет соответствовать, это будет маршрут по умолчанию. Но, неважно, где я его положил - сверху, снизу, после ": id/: slug" по крайней мере одна страница даст мне ошибку "id is not defined". Может ли кто-нибудь объяснить, где я ошибаюсь? благодаря
Маршруты сопоставляются в обратном порядке, поэтому сначала укажите наиболее общие маршруты. Но проблема здесь в том, что '/account' будет соответствовать маршруту ': id/: slug', потому что вы не запрашиваете, чтобы: id должен быть числовым значением. Для этого просто добавьте эту строку в определение маршрута:
routes.show_question.reqs.id = "\d+"