2013-04-09 68 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