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(); }); } }
source share