2010-09-21 92 views
1

我有两个途径Zend的路由器优先

; 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的URL匹配,并且它是工作的罚款

搜索路径必须像网址http://mrc.localhost/shopping/search/dvd+box+sethttp://mrc.localhost/shopping/search/123匹配。

搜索路径工作正常的URL,它不具有关键字(:ID)像http://mrc.localhost/shopping/search/dvd+box+set一个整数,但如果关键字只是整数然后类别路由器把precende像网址http://mrc.localhost/shopping/search/123,因此类行为被调用,而不是搜索行动,因为你会看到:idTwo可以是任何字符串,它与“搜索”匹配,因此使用类别路由,但我希望搜索路由被使用,无论关键字是什么。

回答

4

路线实际上是以REVERSE顺序匹配的,因此请在底部放置更具体的路线,并在顶部放置更具体的路线。你的订单很好。

当我测试时,我发现带有ID(123)的搜索URL工作正常,但另一个('dvd + box + set')不起作用。你需要:id是\ w + - 'dvd + box + set'中的+是导致它失败的原因。如果您希望搜索/ *进入搜索操作,请忽略该要求,并在您的操作控制器代码中执行更多操作(如果您必须的话),否则非\ w + id会导致它进入类别路由。

干杯

+0

感谢您的帮助。 – 2010-09-30 14:44:03

1

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

这个想法是更具体的路线(searchroute在你的情况下)应该先于更一般的路线(category route)。

+0

嘿感谢您的答复,我试图通过把INI文件较低,但仍同样的问题,搜索路径。我反过来忽略了搜索路线,而去了类别路线。 – 2010-09-22 12:59:56