bpocallaghan / sluggable
提供了一个 HasSlug 特性,可以在保存 Laravel Eloquent 模型时生成唯一的别名。
1.3.1
2019-10-31 08:19 UTC
Requires
- php: ^7.2
- illuminate/database: ^6.0
- illuminate/support: ^6.0
Requires (Dev)
- orchestra/testbench: ^4.0
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 项目中查看其实际效果。