esign / laravel-underscore-sluggable
Generate slugs when saving UnderscoreTranslatable models
Requires
- php: ^8.0
- esign/laravel-underscore-translatable: ^1.6
- illuminate/support: ^10.0|^11.0
- spatie/laravel-sluggable: ^3.6
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.5
- illuminate/database: ^10.0|^11.0
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^10.1
This package is auto-updated.
Last update: 2024-12-26 07:48:12 UTC
README
This package adds support for spatie/laravel-sluggable
package to models that use the UnderscoreTranslatable
trait from the esign/laravel-underscore-translatable
package.
Installation
You can install the package via composer:
composer require esign/laravel-underscore-sluggable
Usage
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'); } }
Generating a slug from a callback
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.
Testing
composer test
License
The MIT License (MIT). Please see License File for more information.