【问题标题】:Best method for URI Routing this in CodeIgniter?在 CodeIgniter 中进行 URI 路由的最佳方法?
【发布时间】:2011-03-07 06:21:00
【问题描述】:

所以,这里有一个 CodeIgniter 网站 Forrst 上的示例:

http://forrst.com/posts/PHP_Nano_Framework_WIP_Just_throwing_some_ideas_o-mU8

看看那个漂亮的网址。你有根站点,然后是posts,然后是帖子标题和简短的摘录。这对于用户体验来说非常酷。

然而,my CodeIgniter 网站的 URL 实在是太糟糕了。例如

http://mysite.com/code/view/120

所以它访问控制器code,然后是函数view,最后的20是Post ID(它会根据它进行数据库查询)。

我意识到我可以做一些路由。因此,在我的 routes.php 文件中,我将以下内容放入:

$route['posts/(:num)'] = "code/view/$1"; - 所以这将使http://mysite.com/posts/120http://mysite.com/code/view/120 相同。更好一点,我想你会同意的。

我的问题是 - 我如何使用与 Forrst 类似的技术,从而将帖子的摘录实际附加到 URL 中?我真的不明白这怎么可能。 PHP 脚本如何确定它应该在数据库中查找什么内容,尤其是在有多个具有相同标题的事物时?

谢谢!

杰克

【问题讨论】:

    标签: php codeigniter routing codeigniter-url


    【解决方案1】:

    codeigniter 中的 URL 助手有一个函数调用 url_title()。我自己没有使用过,但我认为这正是您要寻找的。​​p>

    【讨论】:

      【解决方案2】:

      要获得示例中的 URL,您需要添加路由规则,就像您已经完成 $route['posts/(:num)'] = "code/view/$1"; 一样。 Forrst 的 url 似乎是“映射的”(或类似的东西),我认为 uri 的最后一部分是存储在数据库中的标识符(o-mU8 似乎是一个哈希,但我更喜欢一个 int id),所以如果他查询,他会用 ndashes (_) 分割 uri,并获取它的最后一部分,就像在您的控制器操作中这样:

      $elements = explode('_',$this-uri-segment(2));
      $identifier = $elements[count($elements)-1];
      
      $results = $this->myModel->myQuery($identifier);
      

      基本上,控制器/和标识符之间的字符串完全没用,但如果您的目标是更好的 SEO,则不是。

      希望对你有帮助

      【讨论】:

        【解决方案3】:

        请参阅official dicussions。通常与此相关的术语是“slug”。自己没有在 CI 论坛上测试过这种方法,但建议和示例看起来不错。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-01-16
          • 2014-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多