Laravel 5.3 Route::resource with parameters before the actual resource parameter
Laravel 5.3 Route::resource with parameters before the actual resource parameter
我正在尝试进行此 REST 设计,但遇到了问题。
我有一个名为 list
的资源
我希望在 /list
之前它有一个像这样的动态参数 {username}/list
并且有像编辑 {username}/list/{id}/edit
等的 CRUD 选项。
使用 ::resource
方法,您可以通过在模型之间使用 .
来指定分层路由模式,例如:
Route::resource('user.list', 'ListController');
这将产生如下内容:
/user/{user}/list/{list}
无论您想要一个用户名 - 这很好,我们只需要在您的 App\Providers\RouteServiceProvider
中添加一些显式模型绑定
Route::bind('user', function($value)(){
if(is_numeric($value)) {
return User::find($value);
} else {
return User::where('username', $value)->first();
}
});
如果 $value 是数字,添加此 explicit model binding
将首先尝试通过 ID
解析用户 dependency injection
。如果不是,那么它将尝试将值与用户 table.
的用户名列相匹配
希望这对您有所帮助。
我正在尝试进行此 REST 设计,但遇到了问题。
我有一个名为 list
我希望在 /list
之前它有一个像这样的动态参数 {username}/list
并且有像编辑 {username}/list/{id}/edit
等的 CRUD 选项。
使用 ::resource
方法,您可以通过在模型之间使用 .
来指定分层路由模式,例如:
Route::resource('user.list', 'ListController');
这将产生如下内容:
/user/{user}/list/{list}
无论您想要一个用户名 - 这很好,我们只需要在您的 App\Providers\RouteServiceProvider
Route::bind('user', function($value)(){
if(is_numeric($value)) {
return User::find($value);
} else {
return User::where('username', $value)->first();
}
});
如果 $value 是数字,添加此 explicit model binding
将首先尝试通过 ID
解析用户 dependency injection
。如果不是,那么它将尝试将值与用户 table.
希望这对您有所帮助。