Динамічна валідація форм у Laravel за допомогою правила prohibited_if

Перекладено ШІ 3 Laravel News 02 червня, 2026

Система валідації форм у веб-застосунках потребує ретельного підходу до взаємозалежних полів. Дізнайтеся, як правило валідації `prohibited_if` у Laravel дозволяє елегантно обмежити введення полів, базуючись на значеннях інших полів, та зробіть ваші форми динамічними і інтуїтивно зрозумілими!

Валідність форм у веб-додатках вимагає дбайливого підходу до взаємозалежних полів. Правило валідації prohibited_if у Laravel пропонує елегантне рішення для умовного обмеження введення даних залежно від інших значень полів. Давайте розглянемо, як реалізувати цю потужну функцію у ваших додатках.

Що таке prohibited_if

Правило валідації prohibited_if дозволяє вам визначити, коли певні поля мають залишатися порожніми або відсутніми залежно від конкретних умов. Це особливо корисно при створенні динамічних форм з взаємозалежними полями.

use Illuminate\Support\Facades\Validator;

$validator = Validator::make($request->all(), [
    'freelance_company' => 'prohibited_if:type,individual',
    'type' => 'required|in:individual,business'
]);

Приклад використання prohibited_if у реальному житті

Розгляньмо, як реалізувати систему реєстрації членства з динамічними вимогами полів:

<?php

namespace App\Http\Controllers;

use App\Models\Membership;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;

class MembershipController extends Controller
{
    public function store(Request $request)
    {
        $request->validate([
            'membership_type' => 'required|in:personal,corporate',
            'full_name' => 'required|string|max:255',
            'organization_name' => [
                'prohibited_if:membership_type,personal',
                'required_if:membership_type,corporate',
                'string',
                'max:255',
            ],
            'organization_size' => [
                'prohibited_if:membership_type,personal',
                'required_if:membership_type,corporate',
                'integer',
                'min:1',
            ],
            'tax_id' => [
                Rule::prohibitedIf(fn() =>
                    $request->membership_type === 'personal' ||
                    $request->country !== 'US'
                ),
                'string',
                'size:9',
            ],
        ], [
            'organization_name.prohibited_if' => 'Дані про організацію не повинні надаватися для особистого членства.',
            'tax_id.prohibited_if' => 'Номер податкового ідентифікаційного коду потрібен лише для корпоративного членства з США.',
        ]);
        Membership::create($request->validated());
        return response()->json([
            'message' => 'Членство успішно створено'
        ]);
    }
}

Ця реалізація демонструє:

  • Динамічні вимоги до полів на основі типу членства
  • Умовну валідацію податкового ідентифікаційного номера для корпоративних членів з США
  • Користувацькі повідомлення про помилки для зрозумілості
  • Поєднання з іншими правилами валідації

Ви можете розширити цю можливість, врахувавши кілька умов:

'business_license' => [
    Rule::prohibitedIf(fn() =>
        $request->membership_type === 'personal' ||
        !in_array($request->business_type, ['retail', 'franchise'])
    ),
    'required_if:business_type,retail,franchise',
    'string',
]

Правило prohibited_if дозволяє створювати складну логіку валідації форм, зберігаючи при цьому чистий і зрозумілий код. Цей підхід забезпечує коректну обробку введених даних користувачами з урахуванням контексту

Популярні

Інше, що варто прочитати

13 Оновлено 01 червня, 2026

Створення CLI-додатка за допомогою Laravel та Docker

Зазирніть у світ Laravel, де потужний CLI-фреймворк відкриває нові можливості для розробки командного інтерфейсу. Дізнайтеся, як створити просту утиліту для перевірки акцій, яка працює з Docker, та які переваги це може принести у вашому проєкті!

83 Оновлено 01 червня, 2026

Все, що потрібно знати про Laravel 13

Laravel 13 вийде в березні 2026 року й вимагатиме мінімум PHP 8.3. Хочете дізнатися, як PHP‑атрибути для моделей, нові налаштування черг і метод Cache::touch() вплинуть на вашу розробку?

18 Оновлено 01 червня, 2026

Перетворення даних у типобезпечні DTO за допомогою пакету Data Model

Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю