Любишь валидацию? Тогда готовься к боли. Потому что если дать пользователю поле email и надеяться, что он введёт туда нормальный адрес без пробелов и смайликов — это как доверить коту охрану холодильника.

Laravel даёт тебе два способа почистить и привести данные в порядок до того, как они попадут в валидацию:

  • Middleware — втыкается глобально или на маршрут.
  • FormRequest — всё в одном месте рядом с правилами.

И да, это не «или-или». Иногда приходится юзать оба, если проект вырос до состояния свалки.

Вариант 1. Middleware: дубина по голове

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

Создать middleware — дело трёх секунд:

php artisan make:middleware PreprocessRequestData

Внутри можно, например, вычистить email и заодно перевести возраст из строки в число:

public function handle(Request $request, Closure $next)
{
    $request->merge([
        'email' => trim($request->input('email')),
        'age'   => (int) $request->input('age'),
    ]);

    return $next($request);
}

Подключаешь в Kernel.php либо глобально, либо точечно к маршруту:

Route::post('/submit', 'UserController@store')->middleware('preprocess');

Глобально — удобно, если у тебя весь проект в стиле «никто не знает, что вводит пользователь». Точечно — если не хочешь по дороге случайно поломать чужие данные.

Вариант 2. FormRequest: хирургия без топора

FormRequest — это цивилизованный способ. Ты сразу описываешь и правила, и как надо подогнать данные перед проверкой. Всё в одном месте, не надо прыгать по файлам.

php artisan make:request UserFormRequest

Открываешь и прописываешь prepareForValidation():

protected function prepareForValidation()
{
    $this->merge([
        'email' => trim($this->input('email')),
        'age'   => (int) $this->input('age'),
    ]);
}

Правила рядом:

public function rules()
{
    return [
        'email' => 'required|email',
        'age'   => 'required|integer|min:18',
    ];
}

Подключение — проще некуда:

public function store(UserFormRequest $request)
{
    // Здесь данные уже чищенные и проверенные
}

Красота в том, что ты смотришь на FormRequest и сразу понимаешь: тут режем пробелы, тут приводим типы, тут валидируем. Всё прозрачно.

Где лучше чистить: middleware или FormRequest?

— Если у тебя одно и то же правило надо применять к куче маршрутов, бери middleware.
— Если речь про конкретную форму/ресурс — FormRequest рулит.

Но знай: middleware — это молоток, а FormRequest — скальпель. И в реальном проекте часто нужен и тот, и другой.

Итог

Laravel не будет сам догадываться, что юзер вставил пробелы в email или написал возраст «двадцать пять» словами. Твоя задача — подрезать этот мусор ещё до того, как валидатор начнёт ныть.

— Middleware: быстро, грубо, сразу на входе.
— FormRequest: аккуратно, точечно, красиво.

И главное — делай это до валидации, иначе потом будешь выковыривать говно из базы и материться на пользователя, который «ничего не трогал».