2015-01-11 3 views
0

Я определил некоторые маршруты в routes.ini файла для простого Q & приложения:Zend Framework 1: Конфликт с моими маршрутами (routes.ini)

; 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 не указан». Я думал, что дно будет иметь смысл, так как другие маршруты не совпадают (/ 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». Может ли кто-нибудь объяснить, где я ошибаюсь? Спасибо

ответ

0

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

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