This package adds support for spatie/laravel-sluggable
package to models that use the UnderscoreTranslatable
trait from the esign/laravel-underscore-translatable
package.
You can install the package via composer:
composer require esign/laravel-underscore-sluggable
To support slug generation for models that use the UnderscoreTranslatable
trait, you may add the HasTranslatableSlug
trait to your models.
Next up, you should define the getSlugOptions
method on your model, which should be created using the createWithLocales
method.
namespace App\Models;
use Esign\UnderscoreSluggable\HasTranslatableSlug;
use Esign\UnderscoreTranslatable\UnderscoreTranslatable;
use Illuminate\Database\Eloquent\Model;
use Spatie\Sluggable\SlugOptions;
class Post extends Model
{
use UnderscoreTranslatable;
use HasTranslatableSlug;
public $translatable = [
'title',
'slug',
];
public function getSlugOptions(): SlugOptions
{
return SlugOptions::createWithLocales(['en', 'nl'])
->generateSlugsFrom('title')
->saveSlugsTo('slug');
}
}
You may also generate a slug from a callback by passing a closure to the generateSlugsFrom
method.
This callback will receive the model instance and the current locale as arguments:
namespace App\Models;
use Esign\UnderscoreSluggable\HasTranslatableSlug;
use Esign\UnderscoreTranslatable\UnderscoreTranslatable;
use Illuminate\Database\Eloquent\Model;
use Spatie\Sluggable\SlugOptions;
class Post extends Model
{
use UnderscoreTranslatable;
use HasTranslatableSlug;
public $translatable = [
'title',
'slug',
];
public function getSlugOptions(): SlugOptions
{
return SlugOptions::createWithLocales(['en', 'nl'])
->generateSlugsFrom(function (Model $model, string $locale) {
return $model->getTranslation('title', $locale) . '-' . $model->id;
})
->saveSlugsTo('slug');
}
}
For more configuration options, please refer to the spatie/laravel-sluggable documentation.
composer test
The MIT License (MIT). Please see License File for more information.