使用 Quora 让我想知道他们是如何做他们的 slug 的:quora.com/topics-slugs、quora.com/questions-slug 或 quora.com/usernames-slug。
实际上我正在使用 yii 框架开发一个应用程序,我想要一个像 quora 一样的 slug 吗?
多谢你们
您也可以使用重写规则来执行此操作。在您的配置文件中有这样的规则:
'controller/<slug:[\w\-]+>'=>'controller/view',
将采用这样的 URL:
controller/my-slug
它将重定向到控制器中的 actionView(),并将 slug ("my-slug") 作为 $_GET 变量传递。使用该重写规则,您现在调用 $_GET['slug'] 它将从 url 返回“my-slug”。
我有一个“slug”行作为主键,所以我只需在我的 actionView() 中查询数据库 $_GET['slug'] 并根据 URL 获得正确的记录。奇迹般有效。祝你好运!
更新 除了使用 slug 之外,要摆脱控制器前缀,您可能需要一个大表来跟踪所有 url slug(以防止重复)。如果你有这个,那么你可以做一些不同的事情:
1 覆盖onBeginRequest以查找主 slug 表以确定要调用的控制器。2. 对 SiteController 中的单个 ActionIndex 使用主重写,并在该操作中查找主表中的 slug 以确定将用户发送到哪个控制器/操作。重写规则看起来像这样:
'<slug:[\w\-]+>'=>'site/index',
像这样的东西,例如:
function _getSlugFromName($name){
return preg_replace('#[\s]+#','-',preg_replace('#[^\d\w -]*#','',str_replace(array('ä','ü','ö','ß'),array('ae','ue','oe','ss'),html_entity_decode(mb_strtolower(trim($name),'UTF-8'),ENT_COMPAT,'UTF-8'))));
}
这可能会对您有所帮助:dburlmanager
提供基于动态数据库的 URL 规则。基于数据库的动态 URL 规则(漂亮的永久链接或友好的 URL)
这些动态规则就像 Wordpress 的“漂亮的永久链接”或“友好的 URL”。您不必在 URL 上包含控制器名称(或 ID):此扩展可以处理请求 URI 并将其路由到正确的控制器。