在codeigniter中使用slugs

esa*_*wan 13 php codeigniter clean-urls slug

我听说有人用slu to来生成干净的网址.我不知道它是如何工作的.目前我有一个codeigniter网站,生成这样的网址

www.site.com/index.php/blog/view/7
Run Code Online (Sandbox Code Playgroud)

根据我的理解,通过维持一个slug字段,可以实现网址

www.site.com/index.php/blog/view/once-upon-a-time
Run Code Online (Sandbox Code Playgroud)

这是怎么做到的?特别是参考codeigniter?

Bol*_*ock 52

我只是将slug存储在我的数据库表中,在一个名为的列中slug,然后找到一个带有slug的帖子,如下所示:

public function view($slug)
{
    $query = $this->db->get_where('posts', array('slug' => $slug), 1);

    // Fetch the post row, display the post view, etc...
}
Run Code Online (Sandbox Code Playgroud)

另外,要轻松从帖子标题中派生出一个slug,只需使用url_title()URL帮助:

// Use dashes to separate words;
// third param is true to change all letters to lowercase
$slug = url_title($title, 'dash', true);
Run Code Online (Sandbox Code Playgroud)

一点点好处:你可能希望对列实现一个唯一的键约束slug,这可以确保每个帖子都有一个独特的slug,因此CodeIgniter应该寻找的帖子不含糊.当然,您可能应该首先为您的帖子提供独特的标题,但是将其放在适当的位置会强制执行规则并防止您的应用程序搞砸.

  • 这正是我的方式,但我有点担心这些类型的URL的性能.假设您有一个类似于Stackoverflow的URL:/ questions/{integer}/{slug},并不比/ questions/{slug}更有效,因为使用第一种类型的URL,您可以简单地使用数据库中的主键,用于加快搜索速度.使用其他URL,您将不得不进行字符串比较,这肯定会更慢. (2认同)