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
Yes, you can use slug
in your route
and generated url
, for example, if you declare a route something like this:
Route::get('users/{username}', 'UserController@profile')->where('profile', '[a-z]+');
Then in your controller, you may declare the method like this:
public function profile($username)
{
$user = User::where('username', $username)->first();
}
The username
is your slug here and it must be a string because of where()...
in the route declaration. If an integer
is passed then route
couldn't be found and 404
error will be thrown.
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.
See Laravel 5.3 (or 5.2) Route Model Biding