Skip to content

Create permanent seo friendly slugs for every model

License

Notifications You must be signed in to change notification settings

hyperlinkgroup/laravel-sluggable

Repository files navigation

Slugs for Laravel - laravel-sluggable

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Create permanent seo friendly slugs for every model

Installation

You can install the package via composer:

composer require hyperlink/laravel-sluggable

You can publish and run the migrations with:

php artisan vendor:publish --tag="laravel-sluggable-migrations"
php artisan migrate

You can publish the config file with:

php artisan vendor:publish --tag="laravel-sluggable-config"

This is the contents of the published config file:

return [
    /*
     * The name of the table that will store the slugs.
     */
    'table' => 'slugs',

    /*
     * The name of the column that will store the slug.
     */
    'column' => 'slug',

    /*
     * The separator used to separate words in the slug.
     * ATTENTION: If you change this value
     * no existing slugs will be changed.
     */
    'separator' => '-',

    /*
     * The separator used to separate the slug from the counter.
     * If the slug already exists, a counter will be added.
     * ATTENTION: If you change this value
     * no existing slugs will be changed.
     */
    'counter_separator' => '_',

    /*
     * The max length of the slug excluding the counter.
     * ATTENTION: If you change this value to above 255
     * you must also publish the migration and
     * change column type in the database.
     */
    'max_length' => 255,

    /*
     * The model that will be used to generate the slug.
     * You can use your own model by extending the provided model.
     */
    'model' => Hyperlink\Sluggable\Models\Slug::class,
];

Usage

class Post extends Model
{
    use Sluggable; // Add this trait to your model

    // The column that will be used to generate the slug
    protected string $slugCreatedFrom = 'title';
}

The trait will register an observer that will generate the slug when the model is created or updated.

    public static function bootSluggable(): void
    {
        // ...
        static::created(/* ... */);

        static::updated(/* ... */);
        // ...
    }

You can overwrite it with

protected function makeSlug(): string
{
    return (string) sluggable($this->{$this->getSlugCreatedFrom()});
}

Testing

composer test

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

Create permanent seo friendly slugs for every model

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages