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

1
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 17 грудня, 2025
Система валідації форм у веб-застосунках потребує ретельного підходу до взаємозалежних полів. Дізнайтеся, як правило валідації `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 дозволяє створювати складну логіку валідації форм, зберігаючи при цьому чистий і зрозумілий код. Цей підхід забезпечує коректну обробку введених даних користувачами з урахуванням контексту

Популярні

Logomark Logotype

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

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

Logomark Logotype

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

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

Logomark Logotype

Оптимізація запитів до бази даних за допомогою скорочених методів Laravel

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