corazzi/sluggable

通过挂钩创建事件自动为您的 Eloquent 模型创建 slugs

v1.1.0 2017-03-10 13:34 UTC

This package is not auto-updated.

Last update: 2024-09-28 20:30:33 UTC


README

通过挂钩创建事件自动为您的 Eloquent 模型创建 slugs

安装

在您的 Laravel 项目中运行 composer require Corazzi/sluggable 即可。

用法

要向模型添加自动 slug 生成,请使用 Corazzi\Sluggable\Sluggable 特性。

namespace Acme\Models;

use Illuminate\Database\Eloquent\Model;
use Corazzi\Sluggable\Sluggable;

class Post extends Model
{
    use Sluggable;
}

现在,当您创建一个使用该特性的新模型时,它将查找 name 列并生成一个新的 slug,然后将其保存到 slug 列。

$post = Post::create([
    'name' => 'My first post'
]);

$post->slug; // my-first-post

自定义列

如果您想为源字符串和 slug 使用不同的列名,您可以在模型上设置受保护的属性 $slugOrigin$slugColumn

namespace Acme\Models;

use Illuminate\Database\Eloquent\Model;
use Corazzi\Sluggable\Sluggable;

class Post extends Model
{
    use Sluggable;
    
    protected $slugOrigin = 'title';
    
    protected $slugColumn = 'post_name';
}

示例

$post = Post::create([
    'title' => 'My second post'
]);

$post->post_name; // my-second-post

现有的 slugs

如果模型已存在 slug,它将自动将整数追加到 slug 的末尾,直到生成一个唯一的 slug。

// my-second-post already exists

$post = Post::create([
    'title' => 'My second post'
]);

$post->post_name; // my-second-post-1

$post = Post::create([
    'title' => 'My second post'
]);

$post->post_name; // my-second-post-2

// ...and so on

显式设置 slugs

在创建新模型时可以显式设置 slug,并将自动生成跳过。

$post = Post::create([
    'name' => 'How to explicitly set a slug',
    'slug' => 'explicitly-setting-slugs-with-sluggable'
]);

$post->slug; // explicitly-setting-slugs-with-sluggable

空的源列

如果源列为空,则将抛出 Corazzi\Sluggable\EmptyOriginException