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.
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.
Example:
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'freelance_company' => 'prohibited_if:type,individual',
'type' => 'required|in:individual,business'
]);
– 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:
– 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.
All Comments