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.

的用户名列相匹配

希望这对您有所帮助。