I have made eloquent-sluggable work on my app. Slugs are saved just fine. Buuuut... How do I use it to create a pretty url?
If possible, I would like to use them in my url instead of ID numbers.
As of Laravel 5.2, if you use Route Model Binding, then you can make your routes that contain the object identifier as usual (Implicit Binding). For example:
In routes/web.php
(Laravel 5.3) or app/Http/routes.php
(Laravel 5.2):
Route::get('categories/{category}', 'CategoryController@show');
In your CategoryController
:
show (Category $category) {
//
}
The only thing you need to do is telling Laravel to read the identifier from a different column like, for example, slug
column, by customizing the key name in your eloquent model:
/**
* Get the route key for the model.
*
* @return string
*/
public function getRouteKeyName()
{
return 'slug';
}
Now, you can refer your url
's that requires the object identifier with the slug
identifier instead the id
one.
Yes, you can use
slug
in yourroute
and generatedurl
, for example, if you declare a route something like this:Then in your controller, you may declare the method like this:
The
username
is your slug here and it must be a string because ofwhere()...
in the route declaration. If aninteger
is passed thenroute
couldn't be found and404
error will be thrown.