在CodeIgniter中进行URI路由的最佳方法是什么?

时间:2010-06-23 10:38:16

标签: php codeigniter routing codeigniter-url

所以,这是CodeIgniter网站Forrst的一个例子:

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

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

然而,我的 CodeIgniter网站的网址很简单。 E.G。

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

所以它访问控制器code,然后访问函数view,然后结尾的20是帖子ID(它根据它进行数据库查询)。 / p>

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

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

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

谢谢!

杰克

3 个答案:

答案 0 :(得分:2)

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

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

$results = $this->myModel->myQuery($identifier);

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

我希望这会有所帮助

答案 1 :(得分:0)

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

答案 2 :(得分:0)

codeigniter中的URL帮助器有一个函数调用url_title()。我自己没有用过,但我认为这就是你要找的东西。