Правило exclude_if
Правило exclude_if применяется к полю формы при валидации и исключает это поле из результата валидации, если переданное поле соответствует указанному значению. Первым параметром передаётся имя поля, которое нужно проверить, вторым - значение, при котором текущее поле будет исключено.
Синтаксис
<?php
$rules = [
'field' => 'exclude_if:other_field,value'
];
?>
Пример
Давайте исключим поле 'phone', если поле 'contact_method' равно 'email':
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
class UserController extends Controller
{
public function store(Request $request)
{
$rules = [
'name' => 'required|string',
'contact_method' => 'required|in:email,phone',
'email' => 'exclude_if:contact_method,phone|required|email',
'phone' => 'exclude_if:contact_method,email|required|string'
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()]);
}
$data = $validator->validated();
return $data;
}
}
?>
Результат выполнения кода при отправке формы с contact_method = 'email':
[
"name" => "John Doe",
"contact_method" => "email",
"email" => "john@example.com"
]
Пример
Давайте рассмотрим использование правила с несколькими условиями:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
class OrderController extends Controller
{
public function store(Request $request)
{
$rules = [
'type' => 'required|in:physical,digital',
'address' => 'exclude_if:type,digital|required|string',
'shipping_method' => 'exclude_if:type,digital|required|in:standard,express'
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()]);
}
$data = $validator->validated();
return $data;
}
}
?>
Результат выполнения кода при отправке формы с type = 'digital':
[
"type" => "digital"
]
Пример
Давайте используем правило в классе запроса FormRequest:
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
class ProductRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|string',
'has_discount' => 'required|boolean',
'discount' => 'exclude_if:has_discount,false|required|numeric|min:0|max:100'
];
}
}
?>
Результат выполнения кода при отправке формы с has_discount = false:
[
"name" => "Laptop",
"has_discount" => false
]
Смотрите также
-
правило
exclude_if,
которое исключает поле при выполнении условия -
правило
required_if,
которое делает поле обязательным при выполнении условия -
правило
required_unless,
которое делает поле обязательным, если условие не выполнено -
класс
FormRequest,
который используется для создания классов валидации