2010-09-21 103 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