我有这个显示产品列表的网址,由名为category_listing的控制器管理:
http://localhost:8888/shop/mens/trainers/
我使用uri段4为此页面添加了分页,因此url最终看起来像这样:
http://localhost:8888/shop/mens/trainers/2
我还希望有一条允许用户通过访问此网址查看产品的路线:
http://localhost:8888/shop/mens/trainers/a-trainer-product-here
这由名为product_listing的控制器管理。
所以我创建了一条路线:
$route['shop/(:any)/(:any)/[a-z]'] = 'product/product_listing/$1/$2/$3';
我希望能让我匹配所有产品网址,同时忽略其中包含分页索引的网址。不幸的是它似乎没有用。当我在网址中访问带有产品的链接时,页面(应该使用product_listing控制器)仍在尝试调用category_listing控制器。
有什么想法吗?我想知道网址的产品名称部分中的连字符(a-trainer-product-here)是否会导致匹配的[a-z]部分出现问题?
答案 0 :(得分:2)
您正在使用的正则表达式只能匹配从a到z的字母,并且它只匹配一次,它将不匹配“ - ” 所以代替:
$route['shop/(:any)/(:any)/[a-z]']
你可以尝试:
$route['shop/(:any)/(:any)/([a-z-]*)']
希望这会有所帮助。
答案 1 :(得分:1)
仅[a-z]
只匹配一个字符。您可能希望为一个或多个或+
添加一个修饰符,如*
为零或更多。你的模式也表明你想要捕获最后一个片段(你的替换中有$3
),你的示例slug中有-
个,所以普通[a-z]
只匹配在它前面的“a”。
结合所有这些,我想你会想写:
$route['shop/(:any)/(:any)/([-a-z]*)'] = 'product/product_listing/$1/$2/$3';
这将匹配零个或多个长度slug,在$3
中捕获它们并允许-
s。
我还会考虑在那里使用第三个(:any)
,具体取决于你如何创建这些slu ..