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 项目中查看其实际效果。