Zend路由器优先

时间:2010-09-21 11:01:27

标签: php zend-framework url-rewriting url-routing

我有两条路线

; category route
resources.router.routes.category.type = "Zend_Controller_Router_Route"
resources.router.routes.category.route = "shopping/:idTwo/:id/*"
resources.router.routes.category.defaults.module = "default"
resources.router.routes.category.defaults.controller = "shopping"
resources.router.routes.category.defaults.action = "category"
resources.router.routes.category.reqs.id = \w+
resources.router.routes.category.reqs.id = \d+

; searchroute
resources.router.routes.search.type = "Zend_Controller_Router_Route"
resources.router.routes.search.route = "shopping/search/:id/*"
resources.router.routes.search.defaults.module = "default"
resources.router.routes.search.defaults.controller = "shopping"
resources.router.routes.search.defaults.action = "search"
resources.router.routes.search.reqs.id = \w+

类别路线必须与http://mrc.localhost/shopping/Childrens-Clothing/98等网址匹配且工作正常

搜索路线必须与http://mrc.localhost/shopping/search/dvd+box+set等网址匹配 和http://mrc.localhost/shopping/search/123

搜索路由适用于没有关键字(:id)的网址,如http://mrc.localhost/shopping/search/dvd+box+set之类的整数,但如果关键字只是整数,那么类别路由器就像网址http://mrc.localhost/shopping/search/123一样优先,因此类别操作调用而不是搜索操作,因为你看到:idTwo可以是任何字符串,它匹配“搜索”因此使用类别路由但我想要使用搜索路由,无论关键字是什么。

2 个答案:

答案 0 :(得分:5)

路线实际上是按REVERSE顺序匹配的,因此将更具体的路线放在底部,将更多的路线放在最上面。你的订单没问题。

当我测试时,我发现ID(123)的搜索URL工作正常,但另一个('dvd + box + set')不起作用。你要求:id为\ w + - 'dvd + box + set'中的+是导致它失败的原因。

如果您希望搜索/ *转到搜索操作,请放弃要求,并在您的操作控制器代码中执行更多操作,否则非\ w + ID将导致它转到类别路由。

干杯

答案 1 :(得分:1)

尝试在searchroute定义之前将category route定义放在配置文件中。

我们的想法是更具体的路线(在您的情况下为searchroute)应位于更一般的路线(category route)之前。