如何制作像Quora一样使用Yii框架的url slug?

时间:2010-10-04 15:28:52

标签: php url yii slug

使用Quora让我想知道他们是如何制作他们的slug的:quora.com/topics-slugs,quora.com/questions-slug或quora.com/usernames-slug。

实际上我正在用yii框架开发一个应用程序,我想要像quora那样的slu it吗?

谢谢你们

3 个答案:

答案 0 :(得分:2)

您也可以使用重写规则执行此操作。配置文件中的规则如下:

'controller/<slug:[\w\-]+>'=>'controller/view',

将采用如下网址:

controller/my-slug

它将重定向到Controller中的actionView(),并将slug(“my-slug”)作为$ _GET变量传递。使用该重写规则,您现在调用$ _GET ['slug'],它将从URL返回“my-slug”。

我有一个“slug”行作为主键,所以我只是在我的actionView()中查询数据库中的$ _GET ['slug'],我得到了基于URL的正确记录。奇迹般有效。祝你好运!

UPDATE 除了使用slug之外,为了摆脱控制器前缀,您可能需要一个大表来跟踪所有url slugs(以防止重复)。如果你有,那么你可以做几件不同的事情:

1覆盖onBeginRequest以对主slug表执行查找以确定要调用的Controller。 2.对SiteController中的单个ActionIndex使用主重写,并在该操作中查找主表中的slug以确定将用户发送到哪个控制器/操作。重写规则看起来像这样:

'<slug:[\w\-]+>'=>'site/index',

答案 1 :(得分:1)

  1. 处理您想要使用的任何特殊字符(例如,变形金刚)
  2. 删除所有留下的非字母数字字符
  3. 处理空格
  4. 例如:

    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'))));
    }
    

答案 2 :(得分:1)

这可能会对您有所帮助:dburlmanager

  

提供基于数据库的动态URL规则。   基于数据库的动态URL规则(非常永久链接或友好URL)

     

这些动态规则就像Wordpress的“非常永久链接”或“友好URL”。您不必在URL上拥有控制器名称(或ID):此扩展可以处理请求URI并将其路由到正确的控制器。