当一个 url 模式匹配时,应该如何编写一个钩子来添加一个段附加 URL?
例如:
/site/product/id
路线:
/site/product/id/title-from-query
当一个 url 模式匹配时,应该如何编写一个钩子来添加一个段附加 URL?
例如:
/site/product/id
路线:
/site/product/id/title-from-query
正如您在评论中建议的那样,Codeigniter 的路线非常适合这一点。它们允许您准确控制用户/浏览器在 URL 中可以看到的内容,同时将其推送到对框架有意义的内容。
在您的 routes.php 中,您需要以下内容:
$route['site/product/(:num)/(:any)'] = 'controller/method/$1';
$route['site/product/(:num)] = 'controller/method/$1';
在第一行中,第二个参数(:any)
只是允许路由接受title-from-query
,第二行是可选的,用于处理没有title-from-query
指定的情况。'controller/method'
应替换为您的控制器的名称和正在使用的方法。
更新:
要创建这些 URL(如果数据库中还没有 slug),可以使用以下url_title()
方法:
echo anchor('site/product/id'.url_title($title));
以上将在末尾创建一个带有“slug”的链接。要强制重定向,您需要检查控制器中是否设置了正确的段,如果没有则重定向。StackOverflow 的实现很可能是出于 SEO 目的,如果您删除 slug,您会被带到一个带有 slug 的地址,并且它必须使用 ID 来确定它是什么。如果未提供 slug,您将需要相同的逻辑来重定向:
redirect('/site/product/id/'.$slug, 'location', 301);