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
-
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
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,
],
...
];
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'];
}
}