Introduction
Custom validation rules let you check data in your own way when the built-in checks are not enough.
Custom validation rules let you check data in your own way when the built-in checks are not enough.
php artisan make:rule RuleName // Then in app/Rules/RuleName.php namespace App\Rules; use Illuminate\Contracts\Validation\Rule; class RuleName implements Rule { public function passes($attribute, $value) { // return true if valid, false if not } public function message() { return 'The validation error message.'; } }
The passes method checks if the value is valid.
The message method returns the error message shown if validation fails.
<?php namespace App\Rules; use Illuminate\Contracts\Validation\Rule; class Uppercase implements Rule { public function passes($attribute, $value) { return strtoupper($value) === $value; } public function message() { return 'The :attribute must be uppercase.'; } }
// Using the rule in a controller $request->validate([ 'name' => ['required', new Uppercase()], ]);
This example creates a rule to check if a number is even. The controller uses it to validate input.
<?php namespace App\Rules; use Illuminate\Contracts\Validation\Rule; class EvenNumber implements Rule { public function passes($attribute, $value) { return is_numeric($value) && $value % 2 === 0; } public function message() { return 'The :attribute must be an even number.'; } } // In a controller method public function store(Request $request) { $request->validate([ 'number' => ['required', new EvenNumber()], ]); return 'Number is valid and even!'; }
You can pass extra data to your rule by adding a constructor.
Custom rules help keep validation logic reusable and clean.
Custom validation rules let you create your own checks for data.
They have two main methods: passes and message.
Use them in validation arrays by creating new instances.
passes and message.passes method contains the logic to decide if the data is valid or not.$rule->passes('age', 17) return?class AdultRule implements \Illuminate\Contracts\Validation\Rule {
public function passes($attribute, $value) {
return $value >= 18;
}
public function message() {
return 'You must be an adult.';
}
}class EvenNumberRule implements \Illuminate\Contracts\Validation\Rule {
public function passes($attribute, $value) {
return $value % 2 == 0
}
public function message() {
return 'The number must be even.';
}
}passes method?Pass the test and this pattern moves unknown