[扩展推荐] 如何使 Laravel 项目中的 URL 更友好化

说明

cviebrock/eloquent-sluggable 是一款可对 Laravel 项目中的 URL 进行友好化的扩展包。

本文章由 The EST Group 成员 @Kelvin 撰写, 首发地为 PHPHub 社区.

Demo

Demo 截图

运行 Demo

Demo 代码请见:

https://github.com/CycloneAxe/est-eloquent...

请参照此文档运行 Demo:

分享:如何利用 Homestead 快速运行一个 Laravel 项目

场景说明

在我们平时的 Laravel 项目中, 若有一篇 title 为 "My Dinner With André & François", id 为 5 的文章, 一般会生成如下链接:

http://example.com/post/5

但如果我们想使用 title 来生成文章的 url, 这时 url 就会变成下面这样:

http://example.com/post/My+Dinner+With+And...

可以看到生成的 url 看起来并不是特别清晰, 且对 SEO 也不友好. 这时我们就需要使用到 eloquent-sluggable 来对 url 进行转换了, 转换后的结果如下:

http://example.com/post/my-dinner-with-and...

这时可以明显看到转换后的 url 更加清晰易读, 对 SEO 也更加友好.

文章概览

  1. 安装;
  2. 集成;
  3. 使用;

1. 安装

1). 使用 composer 安装:

composer require cviebrock/eloquent-sluggable

2). 修改 config/app 文件,在 providers 数组内追加如下内容

'providers' => [
    // ...
    'Cviebrock\EloquentSluggable\SluggableServiceProvider',
];

2. 集成

本文假设你已经有了一个使用 Laravel 编写的博客系统,接下来通过对博客文章 (Post 表) 添加对 SEO 友好化的 Url 为例:

1). 修改 Post Model

use Cviebrock\EloquentSluggable\SluggableInterface;
use Cviebrock\EloquentSluggable\SluggableTrait;

class Post extends Model implements SluggableInterface {
  use SluggableTrait;

  protected $sluggable = [
    'build_from' => 'title',
    'save_to'    => 'slug',
    ];
}

2). Post 表追加 slug 字段

php artisan sluggable:table posts

3). 数据库 migration

$ composer dump-autoload
$ php artisan migrate

3. 使用

在每次创建一篇新文章的同时,slug 字段将会自动采用文章 title 作为固定链接的地址

$post = new Post([
    'title' => 'My Awesome Blog Post',
]);

$post->save();

文章创建完成后, 您可以通过 $post->slug 来获取文章的 slug.

更多的例子请移步 官方文档 参考.

本文章由 The EST Group 成员 @Kelvin 撰写,首发地为 PHPHub 社区,转载必须贴上原文链接。


欢迎关注 LaravelTips, 一个专注于为 Laravel 开发者服务, 致力于帮助开发者更好的掌握 Laravel 框架, 提升开发效率的微信公众号.

本帖已被设为精华帖!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 6

不支持中文,Github 上找了下相关的,没发现支持中文的~

7年前 评论

@Specs 倒是可以扩展下,自动用拼音,或者翻译的英文来代替。

7年前 评论

@raywill 我之前就是用的一个翻译 API + str_slug 实现的~

7年前 评论
Destiny
6年前 评论

现在我的情况是数据库里,有slug字段了,但是,怎么使url访问slug就能正常运行?

file

4年前 评论
Kelvin (楼主) 4年前
Jason2018 (作者) 4年前
Kelvin (楼主) 4年前
Jason2018 (作者) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!