edofre / laravel-sluggable
在保存 Eloquent 模型时生成 slugs
Requires
- php: >=5.6.4
- illuminate/database: ~5.0.0|~5.1.0|~5.2.0|~5.3.0|~5.4.0
- illuminate/support: ~5.0.0|~5.1.0|~5.2.0|~5.3.0|~5.4.0
Requires (Dev)
- orchestra/testbench: ~3.2.0|~3.3.0|~3.4.0
- phpunit/phpunit: ^5.0
This package is not auto-updated.
Last update: 2024-09-14 19:31:24 UTC
README
此包提供了一个特质,用于在保存任何 Eloquent 模型时生成唯一的 slug。
$model = new EloquentModel(); $model->name = 'activerecord is awesome'; $model->save(); echo $model->slug; // ouputs "activerecord-is-awesome"
slug 通过 Laravel 的 str_slug 方法生成,其中空格被转换为 '-'。
安装
您可以通过 composer 安装此包
$ composer require edofre/laravel-sluggable
用法
您的 Eloquent 模型应使用 Edofre\Sluggable\HasSlug 特质和 Edofre\Sluggable\SlugOptions 类。
特质包含一个抽象方法 getSlugOptions(),您必须自行实现。
以下是如何实现该特质的示例
<?php namespace App; use Edofre\Sluggable\HasSlug; use Edofre\Sluggable\SlugOptions; use Illuminate\Database\Eloquent\Model; class YourEloquentModel extends Model { use HasSlug; /** * Get the options for generating the slug. */ public function getSlugOptions() : SlugOptions { return SlugOptions::create() ->generateSlugsFrom('name') ->saveSlugsTo('url'); } }
想要使用多个字段作为 slug 的基础?没问题!
public function getSlugOptions() : SlugOptions { return SlugOptions::create() ->generateSlugsFrom(['first_name', 'last_name']) ->saveSlugsTo('url'); }
您还可以将一个 callable 传递给 generateSlugsFrom。
默认情况下,该包将通过在已存在的 slug 后追加 '-' 和一个数字来生成唯一的 slugs。
您可以通过调用 allowDuplicateSlugs 来禁用此行为。
public function getSlugOptions() : SlugOptions { return SlugOptions::create() ->generateSlugsFrom('name') ->saveSlugsTo('url') ->allowDuplicateSlugs(); }
您还可以对创建的 slug 设置最大长度限制
public function getSlugOptions() : SlugOptions { return SlugOptions::create() ->generateSlugsFrom('name') ->saveSlugsTo('url') ->slugsShouldBeNoLongerThan(50); }
由于添加了使它唯一的后缀,slug 可能会稍微长于指定的值。
您也可以通过将其设置为另一个值来覆盖生成的 slug。
$model = EloquentModel:create(['name' => 'my name']); //url is now "my-name"; $model->url = 'my-custom-url'; $model-save(); $model->name = 'changed name'; $model->save(); //url stays "my name"
如果您不希望在模型最初创建时创建 slug,可以使用 `doNotGenerateSlugsOnCreate()` 函数。
public function getSlugOptions() : SlugOptions { return SlugOptions::create() ->generateSlugsFrom('name') ->saveSlugsTo('url') ->doNotGenerateSlugsOnCreate(); }
类似地,如果您想防止在模型更新时更新 slug,请调用 doNotGenerateSlugsOnUpdate()。这可以帮助创建直到您明确想要改变才改变的重定向链接。
public function getSlugOptions() : SlugOptions { return SlugOptions::create() ->generateSlugsFrom('name') ->saveSlugsTo('url') ->doNotGenerateSlugsOnUpdate(); }
如果您想显式更新模型上的 slug,可以在任何时间调用您的模型上的 generateSlug() 来根据您其他选项生成 slug。别忘了调用 save() 来将更新持久化到您的数据库。
变更日志
请参阅 CHANGELOG 以获取有关最近更改的更多信息。
测试
$ composer test
致谢
这是一个从 https://github.com/spatie/laravel-sluggable 分支出来的项目,我只是将其转换为与 php 5.6 兼容。
Spatie 是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到所有开源项目的概述 在这里。
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 以获取更多信息。