(Laravel) sometimesでのバリデーション方法

laravel-somtimes-validation

 

laravelでのバリデーション、
とくに、sometimesメソッドを使ったバリデーションのメモ

 

sometimesメソッドとは

Validatorクラスの、sometimesメソッドのこと。

フォームから送られてきた値に対して、
条件にあった場合のみ、バリデーションを実行できるメソッド
であり、
より柔軟にバリデーションを実行できるメリットがある。

 

sometimesメソッドの詳細

sometimesメソッドの詳細を説明、ちょっと文が多くて分かりづらいかも。

 

sometimesメソッドの書式

sometimesメソッドの書式は下記。


$Validatorクラスのインスタンス->sometimes( 項目名, ルール名, function($input){

     //処理を記述
     //処理結果の戻り値がfalseなら
     //項目名に対して、ルール名でバリデーションを行う

     return bool
});

 

sometimes書式の解説

第3引数にしたクロージャの戻り値がfalseだった場合にのみ、
第2引数に指定したバリデーションルールが、
第1引数に指定した項目名に対して、実行される。
クロージャの結果がtrueの場合は何もしない。

クロージャに引数として渡される$inputは、
Illuminate\Support\Fluentのインスタンスで、
フィールドと入力値にアクセスするためのオブジェクト、らしい、
つまり何が言いたいかというと、
$inputには、フォームからの入力値が入っているから、
$inputから入力値を取り出すなどして、その値によって、
後続のバリデーションをするかしないかを判断しようってこと。

$inputからの値の取り出し方は下記

$value = $input->フォームのname属性;

 

sometimesの使い方の例

説明が長くなったが、下記sometimesを使ったバリデーションの例。
コントローラのアクションにて実行。

public function post(Request $request)
{
     $rules = [
          'age' => 'numeric',
     ];

     $messages = [
          'age.min' => '年齢は0歳以上で入力してください',
     ];

     //バリデータクラスのインスタンスを作成
     $validator = Validator::make($request->all(), rules, $messages);

     //フォームの入力値が整数だった場合、ageがmin:0であるかのバリデーションを実行 
     $validator->sometimes('age', 'min:0', function($input){
          return !is_int($input->age); 
     }

     if (validator-fails()) {
          //ageがmin:0でなかった場合の処理
     }

     //ageがmin:0だった場合の処理
     return view('hoge.index', ['msg'=>'入力値OK'];
}

 

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。