Saturday, November 30, 2019

Laravel 5.5 new feature - Custom Validation Rules with example

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 :
  1. <?php
  2. namespace App\Rules;
  3. use Illuminate\Contracts\Validation\Rule;
  4. class AgeValidationRule implements Rule
  5. {
  6. public function passes($attribute, $value)
  7. {
  8. return $value > 18;
  9. }
  10. public function message()
  11. {
  12. return ':attribute should be greater than 18!';
  13. }
  14. }
Now in the controller, you can define the custom validation rules with request in following way :
  1. public function store()
  2. {
  3. // Validation message would be "age should be greater than 18!"
  4. $this->validate(request(), [
  5. 'age' => [new AgeValidationRule]
  6. ]);
  7. }
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 :
  1. public function store()
  2. {
  3. // Validation message would be "age should be greater than 18!"
  4. $this->validate(request(), [
  5. 'age' => ['required',new AgeValidationRule]
  6. ]);
  7. }
Click here to see the custom validation rules in previous Laravel version :
Load disqus comments

0 comments