caturseptian / laravel-sluggable
在保存Eloquent模型时生成slug
Requires
- php: ^7.2.5
- illuminate/database: ^7.0
- illuminate/support: ^7.0
Requires (Dev)
- orchestra/testbench-core: ^5.0
This package is auto-updated.
Last update: 2024-09-10 16:32:29 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方法生成的,其中空格被转换为'-'。
Spatie是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述在这里。
支持我们
我们投入了大量资源来创建最好的开源包。您可以通过购买我们的付费产品之一来支持我们。
我们非常感谢您从您的家乡给我们寄来明信片,说明您正在使用我们的哪些包。您可以在我们的联系我们页面找到我们的地址。我们将把所有收到的明信片发布在我们的虚拟明信片墙上。
安装
您可以通过composer安装此包
composer require caturseptian/laravel-sluggable
用法
您的Eloquent模型应使用Spatie\Sluggable\HasSlug特性和Spatie\Sluggable\SlugOptions类。
该特性包含一个抽象方法getSlugOptions(),您必须自行实现。
您的模型迁移应该有一个字段来保存生成的slug。
以下是实现该特性的示例
<?php namespace App; use Spatie\Sluggable\HasSlug; use Spatie\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('slug'); } }
及其迁移
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateYourEloquentModelTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('your_eloquent_models', function (Blueprint $table) { $table->increments('id'); $table->string('slug'); // Field name same as your `saveSlugsTo` $table->string('name'); $table->timestamps(); }); } }
要使用生成的slug在路由中使用,请记住使用Laravel的隐式路由模型绑定
namespace App; use Spatie\Sluggable\HasSlug; use Spatie\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('slug'); } /** * Get the route key for the model. * * @return string */ public function getRouteKeyName() { return 'slug'; } }
想要使用多个字段作为slug的基础?没问题!
public function getSlugOptions() : SlugOptions { return SlugOptions::create() ->generateSlugsFrom(['first_name', 'last_name']) ->saveSlugsTo('slug'); }
您也可以将一个callable传递给generateSlugsFrom。
默认情况下,该包将通过追加'-'和一个数字到已经存在的slug来生成唯一的slug。
您可以通过调用allowDuplicateSlugs来禁用此行为。
public function getSlugOptions() : SlugOptions { return SlugOptions::create() ->generateSlugsFrom('name') ->saveSlugsTo('slug') ->allowDuplicateSlugs(); }
您还可以为创建的slug设置最大长度限制
public function getSlugOptions() : SlugOptions { return SlugOptions::create() ->generateSlugsFrom('name') ->saveSlugsTo('slug') ->slugsShouldBeNoLongerThan(50); }
由于添加了用于使其唯一的后缀,slug可能会略微长于指定的值。
您还可以通过调用usingSeparator使用自定义分隔符
public function getSlugOptions() : SlugOptions { return SlugOptions::create() ->generateSlugsFrom('name') ->saveSlugsTo('slug') ->usingSeparator('_'); }
要设置Str::slug使用的语言,您可以调用usingLanguage
public function getSlugOptions() : SlugOptions { return SlugOptions::create() ->generateSlugsFrom('name') ->saveSlugsTo('slug') ->usingLanguage('nl'); }
您还可以通过将其设置为与生成的slug不同的值来覆盖生成的slug。
$model = EloquentModel:create(['name' => 'my name']); //slug is now "my-name"; $model->slug = 'my-custom-url'; $model->save(); //slug is now "my-custom-url";
如果您不想在模型最初创建时创建slug,可以设置使用doNotGenerateSlugsOnCreate()函数。
public function getSlugOptions() : SlugOptions { return SlugOptions::create() ->generateSlugsFrom('name') ->saveSlugsTo('slug') ->doNotGenerateSlugsOnCreate(); }
类似地,如果您想防止在模型更新时更新slug,请调用doNotGenerateSlugsOnUpdate()。
public function getSlugOptions() : SlugOptions { return SlugOptions::create() ->generateSlugsFrom('name') ->saveSlugsTo('slug') ->doNotGenerateSlugsOnUpdate(); }
这可以帮助创建直到您明确想要更改时才更改的永久链接。
$model = EloquentModel:create(['name' => 'my name']); //slug is now "my-name"; $model->save(); $model->name = 'changed name'; $model->save(); //slug stays "my-name"
如果您想显式更新模型上的slug,您可以在任何时间调用模型上的generateSlug()来使slug符合您的其他选项。不要忘记save()模型以将更新持久化到数据库。
变更日志
请参阅CHANGELOG以获取有关最近更改的更多信息。
测试
composer test
贡献
有关详细信息,请参阅CONTRIBUTING。
安全
如果您发现任何安全问题,请通过电子邮件freek@spatie.be而不是使用问题跟踪器来报告。
致谢
许可证
MIT许可证(MIT)。更多信息请参阅许可证文件。