РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
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 для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить