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

Метод when

Метод when класса Rule позволяет условно применять правила валидации. Первым параметром передаётся условие, вторым - колбэк, в который передаётся объект правил. Если условие истинно, применяются правила из колбэка. Если ложно - правила игнорируются. Метод возвращает объект правила для цепочки вызовов.

Синтаксис

<?php use Illuminate\Validation\Rule; Rule::when($condition, function ($rule) { $rule->required(); $rule->min(5); }); ?>

Пример

Валидация поля 'content' только если поле 'status' равно 'draft':

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Validation\Rule; class ArticleController extends Controller { public function store(Request $request) { $validated = $request->validate([ 'status' => 'required|string', 'content' => Rule::when( $request->input('status') === 'draft', function ($rule) { $rule->required()->string()->min(10); } ), ]); echo "Validation passed"; } } ?>

Результат выполнения кода при статусе 'draft' и длине текста 15 символов:

"Validation passed"

Пример

Использование when с методом unique для проверки уникальности email только при изменении:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Validation\Rule; use App\Models\User; class UserController extends Controller { public function update(Request $request, User $user) { $validated = $request->validate([ 'email' => Rule::when( $request->input('email') !== $user->email, function ($rule) use ($user) { $rule->required()->email()->unique('users', 'email', $user->id); } ), 'name' => 'required|string|max:255', ]); echo "User updated successfully"; } } ?>

Результат выполнения кода при изменении email на уникальный:

"User updated successfully"

Пример

Условное применение нескольких правил в зависимости от типа пользователя:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Validation\Rule; class ProfileController extends Controller { public function store(Request $request) { $userType = $request->input('user_type'); $validated = $request->validate([ 'user_type' => 'required|string', 'company_name' => Rule::when( $userType === 'business', function ($rule) { $rule->required()->string()->max(100); } ), 'birth_date' => Rule::when( $userType === 'individual', function ($rule) { $rule->required()->date()->before('today'); } ), ]); echo "Profile saved"; } } ?>

Результат выполнения кода для пользователя типа 'business':

"Profile saved"

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

  • метод requiredIf,
    который делает поле обязательным при выполнении условия
  • метод unique,
    который проверяет уникальность значения в таблице
  • метод required_with,
    который требует наличия поля при заполнении другого
  • метод sometimes,
    который применяет правила только если поле присутствует
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить