【问题标题】:Laravel 5 override route resource parametersLaravel 5 覆盖路由资源参数
【发布时间】:2018-04-07 04:35:12
【问题描述】:

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

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

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

【问题讨论】:

    标签: php laravel routing laravel-5.5


    【解决方案1】:

    根据 Laravel 文档:

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

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

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

    【讨论】:

    • 太棒了!我今天过得很糟糕,因为我的控制器正在寻找一个错误的单数化资源名称......谢谢!
    猜你喜欢
    • 2021-05-24
    • 2016-09-21
    • 1970-01-01
    • 2015-11-23
    • 2017-01-17
    • 2015-10-25
    • 2015-01-11
    • 2015-10-14
    • 2018-11-12
    相关资源
    最近更新 更多