Code Igniter中的自定义路由被覆盖

时间:2013-04-09 23:03:53

标签: php codeigniter

我有这些路线:

$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。

如何根据需要进行此项工作?

1 个答案:

答案 0 :(得分: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]+))来创建所需的规则。