esign/laravel-underscore-sluggable

Generate slugs when saving UnderscoreTranslatable models

1.0.0 2024-11-24 15:48 UTC

This package is auto-updated.

Last update: 2024-12-26 07:48:12 UTC


README

Latest Version on Packagist Total Downloads GitHub Actions

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.