How to add a custom validator to my FormRequest?

I have a rule ( foobar ) that is not built into Laravel, which I want to use in my extended FormRequest . How to create a custom validator for this particular rule?

 public function rules() { return [ 'id' => ['required', 'foobar'] ]; } 

I know that Validator::extend exists, but I do not want to use facades. I want it to be "embedded" in my FormRequest . How can I do this and is it possible?

+3
source share
1 answer

You may have created your own validation method by creating a validator property for your class and setting it to app('validator') . Then you can run extend with this property, just like with a facade.

Create the __construct method and add the following:

 public function __construct() { $this->validator = app('validator'); $this->validateFoobar($this->validator); } 

Then create a new method called validateFoobar , which will take the validator property as the first argument and run extend on it, just like with a facade.

 public function validateFoobar($validator) { $validator->extend('foobar', function($attribute, $value, $parameters) { return ! MyModel::where('foobar', $value)->exists(); }); } 

More information about extend is available here .

In the end, your FormRequest might look like this:

 <?php namespace App\Http\Requests; use App\Models\MyModel; use App\Illuminate\Foundation\Http\FormRequest; class MyFormRequest extends FormRequest { public function __construct() { $this->validator = app('validator'); $this->validateFoobar($this->validator); } public function rules() { return [ 'id' => ['required', 'foobar'] ]; } public function messages() { return [ 'id.required' => 'You have to have an ID.', 'id.foobar' => 'You have to set the foobar value.' ]; } public function authorize() { return true; } public function validateFoobar($validator) { $validator->extend('foobar', function($attribute, $value, $parameters) { return ! MyModel::where('category_id', $value)->exists(); }); } } 
+4
source

Source: https://habr.com/ru/post/1206900/


All Articles