laraeast / laravel-sluggable
Easy creation of slugs for your Eloquent models in Laravel
Installs: 487
Dependents: 0
Suggesters: 0
Security: 0
Stars: 6
Watchers: 2
Forks: 2
Open Issues: 0
Type:package
Requires
- php: ^7.3|^8.0
- laravel/framework: ^7.0|^8.0
Requires (Dev)
- mockery/mockery: ^1.4
- orchestra/testbench: ^5.3|^6.0
README
Easy creation of slugs for your Eloquent models in Laravel.Background: What is a slug?
A slug is a simplified version of a string, typically URL-friendly. The act of "slugging" a string usually involves converting it to one case, and removing any non-URL-friendly characters (spaces, accented letters, ampersands, etc.). The resulting string can then be used as an identifier for a particular resource.
For example, if you have a blog with posts, you could refer to each post via the ID:
http://example.com/post/1
http://example.com/post/2
... but that's not particularly friendly (especially for SEO). You probably would prefer to use the post's title in the URL, if your post is titled "My Dinner With Ahmed & Omar", the URL will be:
http://example.com/post/1-my-dinner-with-ahmed-omar
Installation
-
Install the package via Composer:
- For Laravel 5.2 >= 6.x
$ composer require laraeast/laravel-sluggable:^1.0
- For Laravel 7.x
$ composer require laraeast/laravel-sluggable:^2.0
The package will automatically register its service provider.
- For Laravel 5.2 >= 6.x
Middleware
You should add SluggableRedirectMiddleware
to web
middileware to redirect to latest updated slug.
app/Http/Kernel.php
file :
/** * The application's route middleware groups. * * @var array */ protected $middlewareGroups = [ 'web' => [ ... \Laraeast\LaravelSluggable\SluggableRedirectMiddleware::class, ], ... ];
Updating your Eloquent Models
Your models should use the Sluggable trait, which has an abstract method sluggableFields()
that you need to define. This is where any model-specific configuration is set
use Laraeast\LaravelSluggable\Sluggable; class Post extends Model { use Sluggable; /** * The sluggable fields for model. * * @return array */ public function sluggableFields() { return ['name']; } }