【问题标题】:how to make url slug like Quora does using Yii framework ?如何使用 Yii 框架制作像 Quora 一样的 url slug?
【发布时间】:2011-04-20 21:04:10
【问题描述】:

使用 Quora 让我想知道他们是如何像以下那样做 slug 的:quora.com/topics-slugs、quora.com/questions-slug 或 quora.com/usernames-slug。

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

谢谢大家

【问题讨论】:

    标签: php url yii slug


    【解决方案1】:
    1. 处理您想使用的任何特殊字符(例如元音变音)
    2. 删除所有剩余的非字母数字字符
    3. 处理空白

    类似这样的例子:

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

    【讨论】:

    • 谢谢你,但也许我没有很好地解释我的意思。我的意思是在 quora.com 中,您将看到所有页面,包括(主题、问题和用户名)在域之后都有 slug,并且在 slug 前面没有参数可以调用主题 quora.com/StackOverflow 的控制器和操作示例和对于问题quora.com/… 那么请求如何进行?
    【解决方案2】:

    您也可以使用重写规则来做到这一点。在你的配置文件中有这样的规则:

    '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',
    

    【讨论】:

    • 感谢您的帮助,但也许我没有很好地解释我的意思。我的意思是在 quora.com 中,您会看到所有页面,包括(主题、问题和用户名)在域之后都有 slug,并且在 slug 前面没有参数可以调用主题 quora.com/StackOverflow 的控制器和操作示例,并且对于问题quora.com/… 那么请求如何进行?
    • 我尝试添加更多信息来为您指明正确的方向。祝你好运!
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      相关资源
      最近更新 更多