0

我有这个显示产品列表的 url,它由一个名为 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';

我希望这可以让我匹配所有产品网址,同时忽略其中带有分页索引的网址。不幸的是,它似乎不起作用。当我访问 url 中包含产品的链接时,页面(应该使用 product_listing 控制器)仍在尝试调用 category_listing 控制器。

有任何想法吗?我想知道 URL 的产品名称部分(a-trainer-product-here)中的连字符是否会导致匹配的 [az] 部分出现问题?

4

2 回答 2

2

您正在使用的正则表达式只能匹配从 a 到 z 的字母,并且它只匹配一次,它不会匹配“-”所以而不是:

 $route['shop/(:any)/(:any)/[a-z]'] 

你可以试试:

 $route['shop/(:any)/(:any)/([a-z-]*)'] 

希望这可以帮助。

于 2013-04-14T09:45:41.347 回答
1

[a-z]only 只匹配一个字符。您可能想要+为一个或多个或*零或多个添加修饰符。您的模式还表明您也想捕获最后一段(您$3在替换中拥有),并且您的示例 slug 中包含-s,因此纯[a-z]文本只会匹配它前面的“a”。

结合所有这些,我想你会想写:

$route['shop/(:any)/(:any)/([-a-z]*)'] = 'product/product_listing/$1/$2/$3';

这将匹配零个或多个长度的 slug,将它们捕获用于 in$3并允许-s。我也会考虑在(:any)那里只使用三分之一,这取决于你如何创建这些蛞蝓。

于 2013-04-14T09:45:49.987 回答