Любишь валидацию? Тогда готовься к боли. Потому что если дать пользователю поле 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: аккуратно, точечно, красиво.
И главное — делай это до валидации, иначе потом будешь выковыривать говно из базы и материться на пользователя, который «ничего не трогал».
0 комментариев