laravelでのバリデーション、
とくに、sometimesメソッドを使ったバリデーションのメモ
Contents
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'];
}
コメントを残す