hyperlink / laravel-sluggable
Create permanent seo friendly slugs for every model
dev-main
2023-02-28 10:58 UTC
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: 2025-02-28 15:19:50 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.