Skip to content

esign/laravel-underscore-sluggable

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Generate slugs for UnderscoreTranslatable models

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.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages