michaeljmeadows/sluggable

一个用于生成模型短语的简单特性。

v2.0.0 2023-10-29 23:03 UTC

This package is auto-updated.

Last update: 2024-09-30 00:54:48 UTC


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 包含在任何使用资源控制器的模型的无效短语中。