У меня есть специальное промежуточное программное обеспечение, которое редактирует запросы следующим образом:

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), он работает нормально? Кто-нибудь знает, что я могу делать здесь не так? Я заметил, что если я использую request()->profileLocal в моем контроллере, он работает как положено

1
Dev Daniel 7 Фев 2020 в 18:48

2 ответа

Лучший ответ

Если вы хотите добавить значение в запрос и иметь возможность доступа к нему как к свойству, вы можете добавить его к базовому свойству request:

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

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

Тогда вы сможете получить доступ к значению в вашем контроллере с помощью:

$request->profileLocal

Это значение также будет включено при вызове таких методов, как all() или input().

1
Rwd 7 Фев 2020 в 16:06

Мне сказали, что если я использую:

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

В моем промежуточном программном обеспечении, а затем получить к нему доступ, используя:

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

Это работает, я не знаю, если это правильный путь.

1
Dev Daniel 7 Фев 2020 в 15:58