Метод stopOnFirstFailure
Метод stopOnFirstFailure класса Validator применяется
к экземпляру валидатора и включает режим остановки при первом же
неудачном правиле валидации. Метод не принимает параметров и
возвращает тот же экземпляр валидатора с изменённым поведением.
Это особенно полезно при валидации форм с множеством полей,
когда нет необходимости проверять остальные поля после обнаружения
первой ошибки.
Синтаксис
<?php
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($data, $rules);
$validator->stopOnFirstFailure();
?>
Пример
Давайте создадим валидатор с тремя полями и включим остановку при первой ошибке:
<?php
use Illuminate\Support\Facades\Validator;
$data = [
'name' => '',
'email' => 'invalid-email',
'age' => 150,
];
$rules = [
'name' => 'required|string|min:3',
'email' => 'required|email',
'age' => 'required|integer|min:18|max:99',
];
$validator = Validator::make($data, $rules);
$validator->stopOnFirstFailure();
if ($validator->fails()) {
$errors = $validator->errors()->all();
print_r($errors);
}
?>
Результат выполнения кода:
["The name field is required."]
Как видите, валидация остановилась на первом правиле для поля
'name', и ошибки для полей 'email' и 'age'
не были добавлены в коллекцию ошибок.
Пример
Сравним поведение валидатора без остановки и с остановкой при первой ошибке. Без остановки:
<?php
use Illuminate\Support\Facades\Validator;
$data = [
'title' => '',
'content' => 'short',
'category' => 999,
];
$rules = [
'title' => 'required|string|max:100',
'content' => 'required|string|min:50',
'category' => 'required|integer|exists:categories,id',
];
$validator = Validator::make($data, $rules);
if ($validator->fails()) {
$errors = $validator->errors()->all();
print_r($errors);
}
?>
Результат выполнения кода:
["The title field is required.", "The content must be at least 50 characters.", "The selected category is invalid."]
А теперь с включённой остановкой:
<?php
use Illuminate\Support\Facades\Validator;
$data = [
'title' => '',
'content' => 'short',
'category' => 999,
];
$rules = [
'title' => 'required|string|max:100',
'content' => 'required|string|min:50',
'category' => 'required|integer|exists:categories,id',
];
$validator = Validator::make($data, $rules);
$validator->stopOnFirstFailure();
if ($validator->fails()) {
$errors = $validator->errors()->all();
print_r($errors);
}
?>
Результат выполнения кода:
["The title field is required."]