This is a very small trait. It is an elegant wrapper of cviebrock/eloquent-sluggable.
It defines a default slug source attribute (title
) and adds a scope to find a model by the slug.
You can install the package via composer:
composer require pawelmysior/laravel-sluggable
Use the trait on the model:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use PawelMysior\Sluggable\Sluggable;
class Post extends Model
{
use Sluggable;
}
By default the slug is created from the title
attribute, but you can easily change it by overwriting the getSlugSourceAttribute()
method from the trait on your model like so:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use PawelMysior\Sluggable\Sluggable;
class Post extends Model
{
use Sluggable;
protected function getSlugSourceAttribute(): string
{
return $this->name;
}
}
The slugs will now be created. There is also a scope defined in the trait that lets you find a post by slug:
Post::findBySlug('slug');
The MIT License (MIT). Please see License File for more information.