📅  最后修改于: 2023-12-03 14:40:24.546000             🧑  作者: Mango
cviebrock eloquent-sluggable - PHP
cviebrock eloquent-sluggable是一个PHP库,可以帮助您将任何Eloquent模型的属性自动转换为Slug。Slug是URL友好的字符串,通常用于可以比人类可读的唯一标识符。
主要功能特点
如何使用
只需将cviebrock eloquent-sluggable包添加到您的项目中,并将其用于您的Eloquent模型即可。
首先,将cviebrock eloquent-sluggable添加为Composer依赖项:
composer require cviebrock/eloquent-sluggable
接下来,在要使用Slug的模型上添加Sluggable Trait:
use Cviebrock\EloquentSluggable\Sluggable;
class Article extends Model
{
use Sluggable;
/**
* Return the sluggable configuration array for this model.
*
* @return array
*/
public function sluggable(): array
{
return [
'slug' => [
'source' => 'title'
]
];
}
}
在上面的例子中,我们告诉Sluggable Trait,每当保存Article模型时,使用title属性自动生成slug。根据上面配置,如果我们在数据库中创建一个新的Article时,将自动生成slug。
自定义Slug生成规则
如果您想自定义生成Slug的规则,您可以修改sluggable()方法并传递适当的参数。
例如,以下示例将在slug中使用title和ID属性:
return [
'slug' => [
'source' => ['title', 'id']
]
];
上面的示例将使Slug使用以下格式:
the-title-of-my-post-1
自动更新Slug
您可以通过在模型上设置Sluggable Trait的选项来启用自动更新Slug。
例如,以下示例将在保存模型时自动更新slug:
return [
'slug' => [
'source' => 'title',
'onUpdate' => true
]
];
自定义Slug唯一性
默认情况下,当Sluggable Trait在生成一个Slug与现有记录冲突时,它会自动添加一个后缀以使其唯一。例如,如果我们已经有一个文章的slug是“the-title-of-my-post”,并且我们创建了另一个标题完全相同的文章,它将自动添加后缀“-1”,生成唯一的Slug“the-title-of-my-post-1”。
您可以通过配置Sluggable Trait,自定义您要在Slug生成时使用的唯一性设置。
例如,以下示例保证slug在文章的author_id之下是唯一的:
return [
'slug' => [
'source' => 'title',
'unique' => true,
'uniqueSuffix' => function ($slug, $separator, $count) {
return '-'.uniqid();
}
]
];
Slug查询
您可以使用Sluggable Trait的scopeFindBySlug()方法通过Slug查找模型记录。
例如,以下示例将根据slug在数据库中查找一篇文章:
$article = App\Article::findBySlug('the-title-of-my-post');
结论
cviebrock eloquent-sluggable是一个非常有用和功能丰富的库,它可以帮助您处理Slug在任何Eloquent模型中的转换和管理。它易于使用和配置,并提供了许多自定义选项来满足您的具体需求。