bpocallaghan/sluggable

提供了一个 HasSlug 特性,可以在保存 Laravel Eloquent 模型时生成唯一的别名。

1.3.1 2019-10-31 08:19 UTC

This package is auto-updated.

Last update: 2024-09-18 17:53:34 UTC


README

提供了一个 HasSlug 特性,可以在保存 Laravel Eloquent 模型时生成唯一的别名。

别名通过 Laravel 的 str_slug 方法生成,其中空格会被转换成 '-'。

$model = new EloquentModel();
$model->name = 'laravel is awesome';
$model->save();

echo $model->slug; // ouputs "laravel-is-awesome"

安装

更新您的项目 composer.json 文件。

composer require bpocallaghan/sluggable

使用方法

您的 Eloquent 模型可以使用 Bpocallaghan\Sluggable\HasSlug 特性和 Bpocallaghan\Sluggable\SlugOptions 类。

该特性有一个受保护的 getSlugOptions() 方法,您可以对其进行实现来自定义。

以下是一个示例

class YourEloquentModel extends Model
{
    use HasSlug;
    
    /**
     * This function is optional and only required
     * when you want to override the default behaviour
     */
    protected function getSlugOptions()
    {
        return SlugOptions::create()
            ->slugSeperator('-')
            ->generateSlugFrom('name')
            ->saveSlugTo('slug');
    }
}

如果您想从关系生成别名。

class YourEloquentModel extends Model
{
    use HasSlug;
    
    public function getNameAndFooAttribute()
    {
        $name = $this->name;
        if ($this->foo) {
            $name .= " {$this->foo->name}";
        }

        return $name;
    }
    
    protected function getSlugOptions()
    {
        return SlugOptions::create()
            ->generateSlugFrom('name_and_foo');
    }
}

配置

您不需要在模型中添加此方法(上述内容将作为默认使用)。

只有当您想更改默认行为时才需要。

默认情况下,它将从 name 生成别名并保存到 slug 列。

它将在别名后附加 -1 以确保别名唯一。您可以通过调用 makeSlugUnique(false) 来禁用此功能。

它将使用 - 作为分隔符。您可以通过调用 slugSeperator('_') 来更改此设置。

您可以使用多个字段作为别名来源 generateSlugFrom(['firstname', 'lastname'])

您也可以将 callable 函数传递给 generateSlugFrom()

有关选项和可用配置函数的更多信息,请参阅 这里

变更日志

请参阅 CHANGELOG 了解最近有哪些变化。

演示

Laravel Admin Starter 项目中查看其实际效果。