required_without
Правило required_without используется для проверки обязательности поля в зависимости от присутствия других полей в запросе. Поле считается обязательным, если хотя бы одно из перечисленных полей отсутствует в запросе. Это правило полезно, когда требуется, чтобы пользователь заполнил хотя бы одно поле из группы.
Правило принимает список названий полей через запятую. Если хотя бы одно из указанных полей отсутствует в запросе, то проверяемое поле становится обязательным. Если все указанные поля присутствуют в запросе, то проверяемое поле может быть пустым.
Синтаксис
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
$rules = [
'field' => 'required_without:other_field1,other_field2'
];
?>
Пример
Давайте создадим правило, которое требует заполнения поля 'phone', если поле 'email' отсутствует в запросе:
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
$data = [
'name' => 'John Doe',
'phone' => '+1234567890'
];
$rules = [
'phone' => 'required_without:email'
];
$validator = Validator::make($data, $rules);
if ($validator->fails()) {
echo "Validation failed: " . $validator->errors()->first();
} else {
echo "Validation passed";
}
?>
Результат выполнения кода:
"Validation passed"
Пример
Давайте проверим случай, когда поле 'email' отсутствует, а поле 'phone' тоже не заполнено:
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
$data = [
'name' => 'John Doe'
];
$rules = [
'phone' => 'required_without:email'
];
$validator = Validator::make($data, $rules);
if ($validator->fails()) {
echo "Validation failed: " . $validator->errors()->first();
} else {
echo "Validation passed";
}
?>
Результат выполнения кода:
"Validation failed: The phone field is required when email is not present."
Пример
Давайте используем правило с несколькими полями. Поле 'phone' будет обязательным, если отсутствует хотя бы одно из полей 'email' или 'telegram':
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
$data = [
'name' => 'Jane Doe',
'email' => 'jane@example.com'
];
$rules = [
'phone' => 'required_without:email,telegram'
];
$validator = Validator::make($data, $rules);
if ($validator->fails()) {
echo "Validation failed: " . $validator->errors()->first();
} else {
echo "Validation passed";
}
?>
Результат выполнения кода:
"Validation failed: The phone field is required when email / telegram is not present."
Пример
Давайте рассмотрим использование правила в контроллере. Создадим форму, где пользователь должен указать хотя бы один способ связи:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class ContactController extends Controller
{
public function store(Request $request)
{
$rules = [
'email' => 'email',
'phone' => 'required_without:email|string',
'address' => 'required_without:email,phone|string'
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return response()->json([
'errors' => $validator->errors()
], 422);
}
return response()->json([
'message' => 'Contact saved successfully'
]);
}
}
?>
Смотрите также
-
правило
required,
которое делает поле обязательным всегда -
правило
required_with,
которое делает поле обязательным при наличии других полей -
правило
required_if,
которое делает поле обязательным при совпадении значения другого поля -
правило
required_unless,
которое делает поле обязательным при несовпадении значения другого поля