Laravel Tutorials

Dynamic Form Validation in Laravel with prohibited_if

Published
Dynamic Form Validation in Laravel with prohibited_if image

Form validation in web applications requires careful handling of interdependent fields. Laravel's prohibited_if validation rule provides an elegant solution for conditionally restricting field inputs based on other field values. Let's explore how to implement this powerful feature in your applications.

Understanding prohibited_if

The prohibited_if validation rule enables you to specify when certain fields must remain empty or absent based on specific conditions. This proves invaluable when building dynamic forms with interdependent fields.

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

Real-World example of prohibited_if

Let's implement a professional membership registration system with dynamic field requirements:

<?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' => 'Organization details should not be provided for personal memberships.',
'tax_id.prohibited_if' => 'Tax ID is only required for US-based corporate memberships.',
]);
Membership::create($request->validated());
return response()->json([
'message' => 'Membership created successfully'
]);
}
}

This implementation demonstrates:

  • Dynamic field requirements based on membership type
  • Conditional tax ID validation for US corporate members
  • Custom error messages for clarity
  • Combined usage with other validation rules

You can extend this further with multiple conditions:

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

The prohibited_if rule enables the creation of sophisticated form validation logic while maintaining clean, readable code. This approach ensures your forms handle user input appropriately based on context.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

Sponsored

acquaintsoft logo
Acquaint Softtech

Hire Laravel developers with AI expertise at $20/hr. Get started in 48 hours.

Visit Acquaint Softtech

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article