2013-04-09 161 views
1

我有這些路線:自定義路線被覆蓋

$route['shop/(:any)/(:any)'] = 'product/category_listing/$1/$2'; 
$route['shop/(:any)/(:any)/(:any)'] = 'product/product_listing/$1/$2/$3'; 

當我把這個網址:

http://mysite.com/shop/mens/trainers/a-product

的product_listing方法應該叫而是第一種方法(category_listing )被調用,並且product_listing從不被調用。

如何根據需要進行此項工作?

回答

3

數組元素的順序很重要!

關鍵字(:any)匹配所有內容,甚至是斜槓,所以在您的示例中,CodeIgniter找到第一個匹配的路由並且不再進一步查看。

所以,如果我們這樣做:

$route['shop/(:any)/(:any)/(:any)'] = 'product/product_listing/$1/$2/$3'; 
$route['shop/(:any)/(:any)'] = 'product/category_listing/$1/$2'; 

...那麼產品上市首先別的匹配,那麼一切。

此外,您還可以使用正則表達式(例如([a-z0-9]+))來創建所需的規則。

+0

+1':any'也匹配斜槓。這就是爲什麼翻轉這兩個是要走的路。 – 2013-04-09 23:23:38

+1

僅供參考,在CI 3.0+中,':any'將不再與斜槓匹配。 – 2013-04-10 01:00:02

+0

啊我明白了。非常感謝! – 2013-04-10 07:12:16