Zend Framework 1: Конфликт с моими маршрутами (rout.ini)

0

Я определил некоторые маршруты в файле 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". Может ли кто-нибудь объяснить, где я ошибаюсь? благодаря

Теги:
zend-framework

1 ответ

0

Маршруты сопоставляются в обратном порядке, поэтому сначала укажите наиболее общие маршруты. Но проблема здесь в том, что '/account' будет соответствовать маршруту ': id/: slug', потому что вы не запрашиваете, чтобы: id должен быть числовым значением. Для этого просто добавьте эту строку в определение маршрута:

routes.show_question.reqs.id = "\d+"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню