控制器没有来自中间件的更改请求

Controller doesnt have the alter request from the middleware

我有一个自定义中间件可以像这样编辑请求:

public function handle($request, Closure $next)
{
    $profileLocal = ProfileLocal::where(
        'id', JWTHelper::tokenExtractProfileLocalID($request->token)
    )->with('status')->first();

    if (empty($profileLocal) || $profileLocal->status->email_verified == 0 || $profileLocal->status->blocked == 1) {
        return $this->respondError('You dont have access to this store', 336);
    }

    $request->profileLocal = $profileLocal;

    return $next($request);
}

但是,当我尝试访问 $request->profileLocal 在我的控制器中时:

public function deviceSet(DeviceRequest $request)
{
    dd($request->profileLocal);
}

即使在我的 DeviceRequest 中,如果我尝试 dd(request()->profileLocal) 它工作正常,我也会返回 null? 有谁知道我在这里做错了什么? 我注意到如果我在我的控制器中使用 request()->profileLocal 它会按预期工作

我被告知如果我使用:

$request->attributes->add(['profileLocal' => $profileLocal]);

在我的中间件中,然后使用以下方式访问它:

$request->attributes->get('profileLocal')

有效,但我不知道这是否正确。

如果您想向请求添加一个值并能够将其作为 属性 访问,您可以将其添加到基础 request 属性:

$request->request->add([
    'profileLocal' => $profileLocal
]);

// or $request->request->add(compact('profileLocal'))

然后您将能够通过以下方式访问控制器中的值:

$request->profileLocal

当您调用 all()input().

等方法时,此值也将包含在内