我已经在routes.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"被声明在顶部。否则我会收到一条错误,说“#34; 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未指定"错误。谁能解释我哪里出错?感谢
答案 0 :(得分:0)
路由按相反顺序匹配,因此请先放置最常用的路由。但这里的问题是'/ account'将匹配路由':id /:slug',因为你没有请求:id必须是一个数值。为此,只需将此行添加到路径定义中:
routes.show_question.reqs.id = "\d+"