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

Метод withValidator

Метод withValidator применяется в классе FormRequest и позволяет выполнить дополнительную валидацию после того, как стандартные правила проверки были применены. Метод принимает экземпляр валидатора и позволяет добавить пользовательские проверки или модифицировать поведение валидации.

Синтаксис

<?php namespace AppHttpRequests; use IlluminateFoundationHttpFormRequest; use IlluminateContractsValidationValidator; class CustomRequest extends FormRequest { public function rules() { return [ 'field' => 'required|string' ]; } public function withValidator(Validator $validator) { $validator->after(function ($validator) { // дополнительная логика }); } } ?>

Пример

Давайте добавим проверку, чтобы поле 'title' не содержало запрещённых слов:

<?php namespace AppHttpRequests; use IlluminateFoundationHttpFormRequest; use IlluminateContractsValidationValidator; class ArticleRequest extends FormRequest { public function rules() { return [ 'title' => 'required|string|max:255', 'content' => 'required|string' ]; } public function withValidator(Validator $validator) { $validator->after(function ($validator) { $title = $this->input('title'); $bannedWords = ['spam', 'advertisement', 'promo']; foreach ($bannedWords as $word) { if (stripos($title, $word) !== false) { $validator->errors()->add( 'title', 'The title contains banned words.' ); break; } } }); } } ?>

Пример

Давайте проверим, что дата окончания не раньше даты начала:

<?php namespace AppHttpRequests; use IlluminateFoundationHttpFormRequest; use IlluminateContractsValidationValidator; use CarbonCarbon; class EventRequest extends FormRequest { public function rules() { return [ 'start_date' => 'required|date', 'end_date' => 'required|date' ]; } public function withValidator(Validator $validator) { $validator->after(function ($validator) { $start = Carbon::parse($this->input('start_date')); $end = Carbon::parse($this->input('end_date')); if ($end->lt($start)) { $validator->errors()->add( 'end_date', 'The end date must be after the start date.' ); } }); } } ?>

Пример

Давайте добавим проверку, что суммарная стоимость товаров не превышает лимит:

<?php namespace AppHttpRequests; use IlluminateFoundationHttpFormRequest; use IlluminateContractsValidationValidator; class OrderRequest extends FormRequest { public function rules() { return [ 'items' => 'required|array|min:1', 'items.*.price' => 'required|numeric|min:0', 'items.*.quantity' => 'required|integer|min:1' ]; } public function withValidator(Validator $validator) { $validator->after(function ($validator) { $total = 0; $items = $this->input('items', []); foreach ($items as $item) { $total += $item['price'] * $item['quantity']; } if ($total > 10000) { $validator->errors()->add( 'items', 'Total order amount cannot exceed 10000.' ); } }); } } ?>

Пример

Давайте добавим условную проверку, если поле 'type' равно 'premium':

<?php namespace AppHttpRequests; use IlluminateFoundationHttpFormRequest; use IlluminateContractsValidationValidator; class ProductRequest extends FormRequest { public function rules() { return [ 'name' => 'required|string|max:100', 'type' => 'required|in:standard,premium', 'price' => 'required|numeric|min:0' ]; } public function withValidator(Validator $validator) { $validator->after(function ($validator) { if ($this->input('type') === 'premium') { $price = $this->input('price'); if ($price < 100) { $validator->errors()->add( 'price', 'Premium product price must be at least 100.' ); } } }); } } ?>

Смотрите также

  • метод rules,
    который определяет правила валидации для запроса
  • метод messages,
    который задаёт пользовательские сообщения об ошибках
  • метод authorize,
    который проверяет авторизацию пользователя
  • метод after,
    который добавляет callback после валидации
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить