In this tutorial, I will tell you the new features for adding custom validation rules in Laravel 5.5.
In Laravel 5.5, You can define a dedicated class to handle the validation.
In the previous Laravel version, There is still possibility to define custom validation using Validator::extend
method but custom validation rule object is an excellent alternative solution.
You can generate a class for implementing custom validation rules in Laravel 5.5 by running new artisan command :
php artisan make:rule CustomValidationRule
After running above command, You will get a file CustomValidationRule.php
in following path app/Rules/.
Class CustomValidationRule
will have two methods passes
and message
The passes
method will have two method $attribute
and $value
that can be used to validate the field and message
method return the respected error message when validation fails.
Let's have a example for age validation :
- <?php
- namespace App\Rules;
- use Illuminate\Contracts\Validation\Rule;
- class AgeValidationRule implements Rule
- {
- public function passes($attribute, $value)
- {
- return $value > 18;
- }
- public function message()
- {
- return ':attribute should be greater than 18!';
- }
- }
Now in the controller, you can define the custom validation rules with request in following way :
- public function store()
- {
- // Validation message would be "age should be greater than 18!"
- $this->validate(request(), [
- 'age' => [new AgeValidationRule]
- ]);
- }
You can also use the constructor to inject any further dependency if you want.
If you use custom validation rule then you can not pass a string with rules seperated by a comma. You will have to pass each rule as a single element in an array like this :
- public function store()
- {
- // Validation message would be "age should be greater than 18!"
- $this->validate(request(), [
- 'age' => ['required',new AgeValidationRule]
- ]);
- }
Click here to see the custom validation rules in previous Laravel version : Custom Validation Rules