michaeljmeadows / sluggable
一个用于生成模型短语的简单特性。
v2.0.0
2023-10-29 23:03 UTC
Requires
- php: ^8.0
- illuminate/database: ^8.0|^9.0|^10.0
- illuminate/support: ^8.0|^9.0|^10.0
README
一个用于生成模型短语的简单特性。
安装
您可以通过composer安装此包
composer require michaeljmeadows/sluggable
用法
将短语字段添加到您想生成短语的模型的迁移中
$table->string('slug')->unique();
一旦迁移已更新,您只需在模型定义中包含该特性并使用受保护的数组 $slugFields
定义哪些其他字段应一起使用
<?php namespace App\Models; use michaeljmeadows\Traits\Sluggable; use Illuminate\Database\Eloquent\Model; class NewModel extends Model { use Sluggable; protected array $slugFields = [ 'name', ]; public function getRouteKeyName(): string { return 'slug'; }
我们建议在软删除模型时不清除短语。
重复的短语
生成的短语可能已经在您的模型表中使用过,在这种情况下,Sluggable 将附加一个递增的数字,直到找到唯一的短语。
例如,如果 my-slug
已生成但已在数据库中为不同的模型使用,则尝试 my-slug-1
。如果这也已被占用,则尝试 my-slug-2
,等等。
我们建议您选择不太可能导致冲突的字段。
软删除
如果您将 Sluggable 应用于可以软删除的模型,我们建议在删除时不要更改短语。Sluggable 也将处理与这些模型的潜在冲突。
自定义行为
短语字段
默认情况下,Sluggable 预期短语字段名为 slug
,但可以通过添加受保护的字符串属性 $slugField
进行自定义
<?php namespace App\Models; use michaeljmeadows\Traits\Sluggable; use Illuminate\Database\Eloquent\Model; class NewModel extends Model { use Sluggable; protected string $slugField = 'url_identifier'; // Instead of 'slug'.
多个短语字段
您可以在 $slugFields
数组中使用尽可能多的字段。这些字段按数组中出现的顺序包含在短语中
<?php namespace App\Models; use michaeljmeadows\Traits\Sluggable; use Illuminate\Database\Eloquent\Model; class NewModel extends Model { use Sluggable; protected array $slugFields = [ 'given_name', 'family_name', ];
无效的短语
默认情况下,除了数据库表中的那些外,唯一的无效短语是 create
。这是为了防止与资源控制器冲突。如果您想自定义无效短语列表,可以向您的模型添加受保护的数组属性 $invalidSlugs
<?php namespace App\Models; use michaeljmeadows\Traits\Sluggable; use Illuminate\Database\Eloquent\Model; class User extends Model { use Sluggable; protected array $invalidSlugs = [ 'admin', 'create', ];
我们建议您始终将 create
包含在任何使用资源控制器的模型的无效短语中。