Laravel 5 覆盖路由资源参数
Laravel 5 override route resource parameters
我在资源控制器后面使用了一些网络路由。所以路线看起来很简单:
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 文档:
By default, Route::resource will create the route parameters for your resource routes based on the "singularized" version of the resource name. You can easily override this on a per resource basis by passing parameters in the options array.
所以我不得不使用中间件期望的 user_id
覆盖默认值。
Route::resource('account', 'AccountController', ['parameters' => [
'account' => 'user_id'
]]);
我在资源控制器后面使用了一些网络路由。所以路线看起来很简单:
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 文档:
By default, Route::resource will create the route parameters for your resource routes based on the "singularized" version of the resource name. You can easily override this on a per resource basis by passing parameters in the options array.
所以我不得不使用中间件期望的 user_id
覆盖默认值。
Route::resource('account', 'AccountController', ['parameters' => [
'account' => 'user_id'
]]);