Laravel独自のバリデーションをつくる方法【個人的なお勉強アウトプット】
参考図書
オリジナルのバリデータの作成にはいくつか方法がある。
- Illuminate\Validation\Validatorクラスを継承したクラスを作成する方法(現在は非推奨のようです)
- Validator::extendを使う方法
- 独自のバリデーションルールをつくる
Illuminate\Validation\Validatorクラスを継承したクラスを作成する方法(現在は非推奨のようです)
use Illuminate\Validation\Validator;
class クラス名 extends Validator{
public function validate*** ($attribute, $value, $parameters){
...バリデーションの処理...
return 真偽値;
}
}
Validatorクラスを継承して作成。その中に「validate***」という名前のメソッドを用意。これがバリデーションで使われるルールとして認識される。
例えば「validateAbc」という名前でメソッドを用意すれば'abc'としてつくぁれる。
実例
バリデータクラスの作成
バリデータクラスはコードを生成するコマンドは用意されていない。作業でスクリプトファイルを用意する。
namespace App\Http\Validators;
use Illuminate\Validation\Validator;
class HelloValidator extends Validator{
public function validateHello($attribute, $value, $parameters){
return $value % 2 == 0;
}
}
HelloValidatorという名前で暮らすを作成。
偶数なら許可、奇数なら非許可となるバリデーションルール。
サービスプロバイダに組み込む
use Validator;
use App\Validators\HelloValidator;
public function boot(){
$validator = $this->app['validator'];
$validator->resolver(function($translator, $data, $rules, $messages){
return new HelloValidator($translator, $data, $rules, $messages);
})
}
バリデータは$this->app['validator']
に保管されている。resolvverというメソッドでバリデーションの処理を粉う設定ができる。
クロージャでHelloValidatorクラスのインスタンスをreturnすることで設定できる。
HelloValidatorルールを利用
フォームリクエストのバリデーションルールを設定する箇所にHelloValidatorルールを設定する。
(多分からなずしもフォームリクエストじゃなくても大丈夫。)
public function rules(){
return [
'age' => 'numeric|hello'
]
}
コントローラでフォームリクエストを利用の設定
public function post(HelloRequest $request){
return view('hello.index', ['msg'=>'正しく入力されました']);
}
Validator::extendを使う方法
上記のように独自のバリデータクラスを定義シて組み込むのはきちんとしたバリデータ処理を作成して汎用的に使えるようにする場合は有効。しかし、このフォームだけちょっとカスタマイズしたいルールを使いたい、という場合にextendを使うと簡単。
public function boot(){
Validator::extend('hello', function($attribute, $value, $parameters, $validator){
return $value % 2 == 0;
});
}
これで'hello'というルール名が追加される。
あとはフォームリクエストでルールを設定すればいいだけ。
独自のバリデーションルールをつくる
バリデータ自体の独自のルールをつくる方法
バリデーションルールはIlluminate\Contacts\Validation名前空間の「Rule」というクラスを継承して作られている。
この「Rule」を継承したクラスを用意すれば、そのクラスをバリデーションのルールとして使えるようになる。
バリデーションルールファイルの作り方
php artisan make:rule Myrule
appフォルダの中にRulesというフォルダが作成され、そのなかにMyrule.phpが作成される。
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Myrule implements Rule
{
public function __construct($n)
{
$this->num = $n;
}
public function passes($attribute, $value)
{
return $value % $this->num == 0;
}
public function message()
{
return $this->num . 'で割り切れる値が必要です。';
}
}
指定した数値で割り切れるかどうか判定するバリデーション
Myruyleを使う
フォームリクエストのrulesメソッドに設定。
public function rules(){
return [
'age' => 'numeric|new Myrule(5)',
];
}
5で割り切れるかどうか判定できるようになる。
Author And Source
この問題について(Laravel独自のバリデーションをつくる方法【個人的なお勉強アウトプット】), 我々は、より多くの情報をここで見つけました https://qiita.com/vanshi/items/77a46701c18c9ff2e2fc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .