Метод sometimes
Метод sometimes класса Validator используется для условной
валидации полей. Он позволяет добавлять правила проверки к полю,
только если переданное замыкание возвращает true, либо если
другой указанный поле имеет определённое значение. Метод особенно
полезен, когда необходимо проверять поле только при определённых
условиях, например, при выполнении сложной бизнес-логики.
Первым параметром метод принимает имя или массив имён полей, вторым - условие (замыкание или имя другого поля с значением), третьим - массив правил валидации. Если условие выполняется, правила применяются к указанным полям.
Синтаксис
<?php
$validator->sometimes($field, $condition, $rules);
?>
Пример
Давайте создадим валидатор и применим правило sometimes
для поля 'password', если поле 'is_admin' равно 1:
<?php
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
$data = [
'is_admin' => 1,
'password' => 'secret123'
];
$rules = [
'is_admin' => 'required|boolean'
];
$validator = Validator::make($data, $rules);
$validator->sometimes('password', 'required|min:8', function ($input) {
return $input->is_admin == 1;
});
if ($validator->fails()) {
$res = $validator->errors()->all();
} else {
$res = 'Validation passed';
}
echo $res;
?>
Результат выполнения кода:
"Validation passed"
Пример
Давайте применим правило sometimes к полю 'email',
если поле 'has_email' равно 1. Используем упрощённый
синтаксис с передачей имени поля и ожидаемого значения:
<?php
use Illuminate\Support\Facades\Validator;
$data = [
'has_email' => 1,
'email' => 'admin@example.com'
];
$rules = [
'has_email' => 'required|boolean'
];
$validator = Validator::make($data, $rules);
$validator->sometimes('email', 'required|email', 'has_email=1');
if ($validator->fails()) {
$res = $validator->errors()->all();
} else {
$res = 'Validation passed';
}
echo $res;
?>
Результат выполнения кода:
"Validation passed"
Пример
Давайте применим несколько правил к нескольким полям
с использованием метода sometimes:
<?php
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
$data = [
'user_type' => 'premium',
'credit_card' => '1234-5678-9012-3456',
'bonus_points' => 100
];
$rules = [
'user_type' => 'required|string'
];
$validator = Validator::make($data, $rules);
$validator->sometimes(['credit_card', 'bonus_points'],
'required|numeric',
function ($input) {
return $input->user_type == 'premium';
}
);
if ($validator->fails()) {
$res = $validator->errors()->all();
} else {
$res = 'Validation passed';
}
echo $res;
?>
Результат выполнения кода:
"Validation passed"
Смотрите также
-
метод
fails,
который проверяет, провалилась ли валидация -
метод
passes,
который проверяет, прошла ли валидация успешно -
метод
errors,
который возвращает все ошибки валидации -
правило
required_if,
которое делает поле обязательным при выполнении условия