Zend框架1:与我的路由(routes.ini)冲突


Zend framework 1: Conflict with my routes (routes.ini)

我在一个简单的问答应用中定义了路由.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/: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"错误。谁能解释我哪里出错了?谢谢

路由以相反的顺序匹配,因此请将最通用的路由放在最前面。但这里的问题是"/account"将与路由":id/:slug"匹配,因为您不要求 :id 必须是数值。为此,只需将此行添加到路由定义中:

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