Правило required_unless
Правило required_unless применяется к полю формы
и делает его обязательным, если указанное другое поле
не равно одному из перечисленных значений. Правило
принимает два или три параметра: имя поля, значение
(или массив значений), при которых поле НЕ является
обязательным.
Синтаксис
<?php
use IlluminateValidationRule;
$rules = [
'field' => 'required_unless:other_field,value',
];
?>
Пример
Давайте сделаем поле 'phone' обязательным, если
поле 'contact_method' не равно 'email':
<?php
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
$request = new Request([
'contact_method' => 'phone',
'phone' => '123456789',
]);
$rules = [
'phone' => 'required_unless:contact_method,email',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->passes()) {
echo "Validation passed";
} else {
echo "Validation failed";
}
?>
Результат выполнения кода:
"Validation passed"
Пример
Теперь попробуем отправить запрос без номера телефона, когда метод связи - телефон:
<?php
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
$request = new Request([
'contact_method' => 'phone',
]);
$rules = [
'phone' => 'required_unless:contact_method,email',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
$errors = $validator->errors()->all();
print_r($errors);
}
?>
Результат выполнения кода:
["The phone field is required when contact method is not email."]
Пример
Использование с массивом значений - поле становится обязательным, если значение поля не равно ни одному из перечисленных:
<?php
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
$request = new Request([
'payment_method' => 'paypal',
]);
$rules = [
'card_number' => 'required_unless:payment_method,cash,bank_transfer',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
$errors = $validator->errors()->all();
print_r($errors);
} else {
echo "Validation passed";
}
?>
Результат выполнения кода:
["The card number field is required when payment method is not cash, bank_transfer."]
Пример
Использование правила в форме в классе FormRequest:
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
class ProfileRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'email' => 'required|email',
'phone' => 'required_unless:contact_method,email',
'contact_method' => 'required|in:email,phone',
];
}
}
?>
Смотрите также
-
правило
required,
которое делает поле всегда обязательным -
правило
required_if,
которое делает поле обязательным, если другое поле равно значению -
правило
required_with,
которое делает поле обязательным, если присутствует другое поле -
правило
required_without,
которое делает поле обязательным, если отсутствует другое поле