📜  cviebrock eloquent-sluggable - PHP (1)

📅  最后修改于: 2023-12-03 14:40:24.546000             🧑  作者: Mango

cviebrock eloquent-sluggable - PHP

cviebrock eloquent-sluggable是一个PHP库,可以帮助您将任何Eloquent模型的属性自动转换为Slug。Slug是URL友好的字符串,通常用于可以比人类可读的唯一标识符。

主要功能特点

  • 自动生成Slug
  • 可自定义Slug生成规则
  • 可以在保存模型时自动更新Slug
  • 可以在冲突时在Slug中添加唯一的后缀
  • 可以通过Slug查询数据库中的记录

如何使用

只需将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模型中的转换和管理。它易于使用和配置,并提供了许多自定义选项来满足您的具体需求。