在 laravel 5 中使用 slug?
Using slugs in laravel 5?
我已经在我的应用程序上完成了 eloquent-sluggable 工作。鼻涕虫保存得很好。 Buuuut...我如何使用它来创建一个漂亮的url?
如果可能的话,我想在我的url中使用它们而不是身份证号码。
是的,您可以在 route
中使用 slug
并生成 url
,例如,如果您声明这样的路由:
Route::get('users/{username}', 'UserController@profile')->where('profile', '[a-z]+');
然后在你的控制器中,你可以这样声明方法:
public function profile($username)
{
$user = User::where('username', $username)->first();
}
这里的 username
是你的 slug,它必须是一个字符串,因为路由声明中有 where()...
。如果传递 integer
则无法找到 route
并且将抛出 404
错误。
从 Laravel 5.2 开始,如果您使用路由模型绑定,那么您可以像往常一样创建包含对象标识符的路由(隐式绑定)。例如:
在routes/web.php
(Laravel 5.3)或app/Http/routes.php
(Laravel 5.2)中:
Route::get('categories/{category}', 'CategoryController@show');
在你的CategoryController
中:
show (Category $category) {
//
}
您唯一需要做的就是告诉 Laravel 从不同的列(例如 slug
列)中读取标识符,方法是自定义 eloquent 型号:
/**
* Get the route key for the model.
*
* @return string
*/
public function getRouteKeyName()
{
return 'slug';
}
现在,您可以使用 slug
标识符而不是 id
标识符来引用需要对象标识符的 url
。
对于以后的读者,从 Laravel 8.0 开始,您可以在路径中指定一个列
Route::get('/users/{user:slug}', function (User $user) {
return $user->bio;
});
我已经在我的应用程序上完成了 eloquent-sluggable 工作。鼻涕虫保存得很好。 Buuuut...我如何使用它来创建一个漂亮的url?
如果可能的话,我想在我的url中使用它们而不是身份证号码。
是的,您可以在 route
中使用 slug
并生成 url
,例如,如果您声明这样的路由:
Route::get('users/{username}', 'UserController@profile')->where('profile', '[a-z]+');
然后在你的控制器中,你可以这样声明方法:
public function profile($username)
{
$user = User::where('username', $username)->first();
}
这里的 username
是你的 slug,它必须是一个字符串,因为路由声明中有 where()...
。如果传递 integer
则无法找到 route
并且将抛出 404
错误。
从 Laravel 5.2 开始,如果您使用路由模型绑定,那么您可以像往常一样创建包含对象标识符的路由(隐式绑定)。例如:
在routes/web.php
(Laravel 5.3)或app/Http/routes.php
(Laravel 5.2)中:
Route::get('categories/{category}', 'CategoryController@show');
在你的CategoryController
中:
show (Category $category) {
//
}
您唯一需要做的就是告诉 Laravel 从不同的列(例如 slug
列)中读取标识符,方法是自定义 eloquent 型号:
/**
* Get the route key for the model.
*
* @return string
*/
public function getRouteKeyName()
{
return 'slug';
}
现在,您可以使用 slug
标识符而不是 id
标识符来引用需要对象标识符的 url
。
对于以后的读者,从 Laravel 8.0 开始,您可以在路径中指定一个列
Route::get('/users/{user:slug}', function (User $user) {
return $user->bio;
});