hyperlink / laravel-sluggable
Create permanent seo friendly slugs for every model
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/hyperlink/laravel-sluggable
Requires
- php: ^8.1
- illuminate/contracts: ^10.0
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.9
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
This package is auto-updated.
Last update: 2026-01-28 17:20:39 UTC
README
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.