РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
670 of 1392 menu
◀ ▶

Метод 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
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить