Метод requiredIf
Метод requiredIf класса Rule применяется для создания правила валидации,
при котором поле становится обязательным только при выполнении заданного условия.
Первым параметром передаётся имя другого поля или замыкание, вторым - значение,
с которым нужно сравнить или результат замыкания.
Синтаксис
<?php
use Illuminate\Validation\Rule;
// Сравнение с другим полем
Rule::requiredIf($field, $value);
// Использование замыкания
Rule::requiredIf(function ($input) {
return $input->someField == 'someValue';
});
?>
Пример
Давайте сделаем поле 'payment_method' обязательным,
если поле 'order_type' равно 'online':
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class OrderController extends Controller
{
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'order_type' => 'required|string',
'payment_method' => Rule::requiredIf('order_type', 'online'),
]);
if ($validator->fails()) {
return $validator->errors();
}
return "Validation passed";
}
}
?>
Если отправить запрос с 'order_type' равным 'online':
["payment_method" => ["The payment method field is required when order type is online."]]
Если отправить запрос с 'order_type' равным 'offline':
"Validation passed"
Пример
Давайте сделаем поле 'discount_code' обязательным,
если общая сумма заказа больше 1000:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class CartController extends Controller
{
public function checkout(Request $request)
{
$validator = Validator::make($request->all(), [
'total_amount' => 'required|numeric',
'discount_code' => Rule::requiredIf(function ($input) {
return $input->total_amount > 1000;
}),
]);
if ($validator->fails()) {
return $validator->errors();
}
return "Validation passed";
}
}
?>
При сумме заказа 1500:
["discount_code" => ["The discount code field is required when total amount is greater than 1000."]]
При сумме заказа 500:
"Validation passed"
Пример
Давайте используем requiredIf в классе FormRequest
для поля 'shipping_address', которое нужно заполнять,
если выбран тип доставки 'courier':
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class OrderRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'delivery_type' => 'required|in:pickup,courier',
'shipping_address' => Rule::requiredIf('delivery_type', 'courier'),
'phone' => 'required|string',
];
}
}
?>
Теперь при отправке запроса с 'delivery_type' равным 'courier':
["shipping_address" => ["The shipping address field is required when delivery type is courier."]]
Смотрите также
-
метод
required,
который делает поле обязательным всегда -
метод
requiredUnless,
который делает поле обязательным, если условие не выполняется -
метод
requiredWith,
который делает поле обязательным при наличии других полей -
метод
rules,
который определяет правила валидации в FormRequest