我在我的应用程序上做了雄辩的工作。 S g保存得很好。 Buuuut ...我如何用它来创建一个漂亮的网址?
如果可能的话,我想在我的网址中使用它们而不是ID号。
答案 0 :(得分:8)
是的,您可以在slug
中使用route
并生成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
错误。
答案 1 :(得分:4)
从Laravel 5.2开始,如果使用Route Model Binding,则可以像往常一样制作包含对象标识符的路径(隐式绑定)。例如:
在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
列:
/**
* Get the route key for the model.
*
* @return string
*/
public function getRouteKeyName()
{
return 'slug';
}
现在,您可以引用需要使用url
标识符的对象标识符的slug
代替id
标识符。
答案 2 :(得分:2)
对于未来的读者,从 Laravel 8.0 开始,您可以在路径中指定一列
Route::get('/users/{user:slug}', function (User $user) {
return $user->bio;
});