Laravel 5覆盖路由资源参数

时间:2017-10-25 23:10:18

标签: php laravel routing laravel-5.5

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

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

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

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作为请求的一部分,我假设因为它已经在请求到达控制器之前被触发了。

有没有办法处理这个而不重写所有资源路由?

1 个答案:

答案 0 :(得分:5)

根据Laravel文档:

  

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

所以我必须使用中间件预期的user_id来覆盖默认值。

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