Валідність форм у веб-додатках вимагає дбайливого підходу до взаємозалежних полів. Правило валідації prohibited_if у Laravel пропонує елегантне рішення для умовного обмеження введення даних залежно від інших значень полів. Давайте розглянемо, як реалізувати цю потужну функцію у ваших додатках.
Правило валідації prohibited_if дозволяє вам визначити, коли певні поля мають залишатися порожніми або відсутніми залежно від конкретних умов. Це особливо корисно при створенні динамічних форм з взаємозалежними полями.
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'freelance_company' => 'prohibited_if:type,individual',
'type' => 'required|in:individual,business'
]);
Розгляньмо, як реалізувати систему реєстрації членства з динамічними вимогами полів:
<?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 дозволяє створювати складну логіку валідації форм, зберігаючи при цьому чистий і зрозумілий код. Цей підхід забезпечує коректну обробку введених даних користувачами з урахуванням контексту