2

当一个 url 模式匹配时,应该如何编写一个钩子来添加一个段附加 URL?

例如:

/site/product/id

路线:

/site/product/id/title-from-query
4

1 回答 1

1

正如您在评论中建议的那样,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);
于 2012-08-22T11:24:48.197 回答