本記事では、laravelでのバリデーションで使える、
sometimesメソッドを使ったバリデーションの仕方について解説をしていく。
(laravel) sometimesメソッドとは
laravelのバリデーションで使えるsometimesとは、
Validatorクラスの、sometimesメソッドのこと。
sometimeメソッドを使うと、
フォームから送られてきた値に対して条件にあった場合のみ、リデーションを実行でき、より柔軟にバリデーションを実行できるメリットがある。
- Validatorクラスの、sometimesメソッドのこと。
- フォームから送られてきた値に対して条件にあった場合のみ、リデーションを実行でき、より柔軟にバリデーションを実行できるメリットがある。
(laravel) sometimesメソッドの使い方
次に、sometimesメソッドの使い方を解説していく。
sometimesメソッドの書式
sometimesメソッドの書式は下記。
# sometimesメソッドの書式
$Validatorクラスのインスタンス->sometimes( 項目名, ルール名, function($input){
//処理を記述
//処理結果の戻り値がfalseなら
//項目名に対して、ルール名でバリデーションを行う
return bool
});
第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'];
}
関連記事
https://readouble.com/laravel/5.5/ja/validation.html