Laravel 5覆盖路由资源参数

use*_*289 3 php routing laravel laravel-5.5

我在资源控制器后面使用了一些网络路由。因此,路线看起来就像:

Route::resource('account', 'AccountController');
Run Code Online (Sandbox Code Playgroud)

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

if ($request->user_id) {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

问题是这样的。在我的非资源路线中,我使用类似以下内容的方法:

Route::get('agentnotes/{user_id}', 'UserNoteController@getUserNotes');
Run Code Online (Sandbox Code Playgroud)

这将user_id变量设置为预期的,并且中间件功能正常。

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

public function show($user_id)
Run Code Online (Sandbox Code Playgroud)

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

有没有一种方法可以在不重写所有资源路由的情况下进行处理?

use*_*289 5

根据Laravel文档:

默认情况下,Route :: resource将基于资源名称的“单数”版本为您的资源路由创建路由参数。您可以通过在options数组中传递参数来轻松地基于每个资源覆盖此参数。

因此,我不得不使用user_id中间件期望的值来覆盖默认值。

Route::resource('account', 'AccountController', ['parameters' => [
    'account' => 'user_id'
]]);
Run Code Online (Sandbox Code Playgroud)