【扩展推荐】如何使 Laravel 项目中的 URL 更友好化
13

说明

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

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

Demo

Demo 截图

运行 Demo

Demo 代码请见:

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

请参照此文档运行 Demo:

https://laravel-china.org/topics/1902

场景说明

在我们平时的 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+Andr%C3%A9+%26+Fran%C3%A7ois

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

http://example.com/post/my-dinner-with-andre-francois

这时可以明显看到转换后的 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 框架, 提升开发效率的微信公众号.

本帖已被设为精华帖!
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 7

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

2年前

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

2年前

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

2年前
Destiny
1年前

这个很不错啊!

9个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!