Laravel 5 覆盖路由资源参数



我在资源控制器后面使用一些 Web 路由。所以路线看起来很简单:

Route::resource('account', 'AccountController');

我还有一个 Web 中间件,用于检查是否在 Request 对象中设置了 user_id 参数:

if ($request->user_id) {
    // do stuff
}

问题是这个。在我的非资源路由中,我使用如下内容:

Route::get('agentnotes/{user_id}', 'UserNoteController@getUserNotes');

这将按预期设置 user_id 变量,并且中间件运行良好。

但是在资源路由中,即使实际的路由方法使用了user_id,中间件也看不到它。例如,AccountController::show方法如下所示:

public function show($user_id)

但是中间件没有将该user_id视为请求的一部分,我认为是因为在请求到达控制器之前它已经触发了。

有没有办法在不重写所有资源路由的情况下处理这个问题?

根据Laravel文档:

默认情况下,Route::resource 将根据资源名称的"单数化"版本为您的资源路由创建路由参数。通过在选项数组中传递参数,您可以基于每个资源轻松覆盖此设置。

因此,我必须使用中间件期望的user_id覆盖默认值。

Route::resource('account', 'AccountController', ['parameters' => [
    'account' => 'user_id'
]]);

最新更新