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 →
Decide with Jev: Laravel AI That Answers with a Probability image

Decide with Jev: Laravel AI That Answers with a Probability

Read article
JetBrains Air: Run AI Coding Agents in JetBrains IDEs image

JetBrains Air: Run AI Coding Agents in JetBrains IDEs

Read article
Memoize Tagged Cache Reads in Laravel image

Memoize Tagged Cache Reads in Laravel

Read article
Eloquent Refreshes: Load Generated Columns After Save image

Eloquent Refreshes: Load Generated Columns After Save

Read article
Laravel AI SDK 1.0 Adds Classification and Tool Approvals image

Laravel AI SDK 1.0 Adds Classification and Tool Approvals

Read article
Tagged Memoized Cache and Model Refreshes in Laravel 13.33 image

Tagged Memoized Cache and Model Refreshes in Laravel 13.33

Read article