validator
クラスにプロパティを作成し、それを に設定することで、独自の検証メソッドを持つことができますapp('validator')
。extend
次に、ファサードと同様に、そのプロパティ run を使用できます。
__construct
メソッドを作成し、これを追加します。
public function __construct() {
$this->validator = app('validator');
$this->validateFoobar($this->validator);
}
次に、ファサードの場合と同様に、プロパティを最初の引数としてvalidateFoobar
取り、その上で実行するという新しいメソッドを作成します。validator
extend
public function validateFoobar($validator) {
$validator->extend('foobar', function($attribute, $value, $parameters) {
return ! MyModel::where('foobar', $value)->exists();
});
}
詳細についてextend
は、こちらをご覧ください。
最終的に、次のFormRequest
ようになります。
<?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();
});
}
}