Изменить значение в Request

Есть класс TestRequest, в котором метод rules(). Мне нужно в зависимости от условия изменить email в user. Изменить так, чтобы в контроллер уже пришёл изменённый Request. Вот пример данных, которые приходят.

Пробовал сделать вот так, но ничего не меняется и в контроллер приходят данные без изменений.

Request::replace(['user.email' => 'test2']);

При merge добавляются новые данные в Request, но старый email не меняется.

Request::merge(['user.email' => 'test2']);

Как можно изменить данные в Request? Если нужно ещё что-нибудь по коду, пишите. Спасибо.


Ответы (1 шт):

Автор решения: Romka

Так будет работать:

Middleware:

public function handle(Request $request, \Closure $next)
{
    $userData = $request->get('user');
    if (empty($userData['email'])) {
        $userData['email'] = $userData['secondary_email'];
        $request->merge([
            'user' => $userData,
        ]);
    }

    return $next($request);
}

То есть проблема в том, что установка вложенных свойств через user.email не работает.

Так же, хотел бы добавить, что не стоит изменять данные в запросе пользователя. Данные должны приходить в том виде в котором, отправлены, если логика работы вашего приложения требует модификации данных, то для этого есть различные решения, например DTO, билдеры и т д.

Или например можно просто сделать в классе FormRequest геттер:

public function getEmail(): string
{
    return $this->has('email') ? $this->get('email') : $this->get('secondary_email');
}
→ Ссылка