Изменить значение в Request
Есть класс TestRequest, в котором метод rules(). Мне нужно в зависимости от условия изменить email в user. Изменить так, чтобы в контроллер уже пришёл изменённый Request. Вот пример данных, которые приходят.
Пробовал сделать вот так, но ничего не меняется и в контроллер приходят данные без изменений.
Request::replace(['user.email' => 'test2']);
При merge добавляются новые данные в Request, но старый email не меняется.
Request::merge(['user.email' => 'test2']);
Как можно изменить данные в Request? Если нужно ещё что-нибудь по коду, пишите. Спасибо.
Ответы (1 шт):
Так будет работать:
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');
}
