问题
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.
回答1:
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.
回答2:
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
来源:https://stackoverflow.com/questions/30787582/using-slugs-in-laravel-5