[Laravel] カスタムバリデーションの追加
- 2022年9月01日
- 技術情報
今回はLaravel標準のバリデーション機能ではカバーできない特別なバリデーションを追加したい場合に有効なバリデーション方法を紹介したいと思います。
Laravel標準のバリデーションの場合
Laravel標準のバリデーションの場合は下記のようにattributesとrulesの設定をおこない、
postされたrequestにValidator::makeを適用することで、バリデーションをおこなうことができます。
$attributes = [
'name' => '名前',
'url' => 'ホームページURL',
'remain_time' => '残り時間',
];
$rules = [
'name' => 'required|max:100',
'url' => 'nullable|url|max:1000',
'remain_time' => 'required|numeric',
];
//※1 バリデート処理
$validator = \Validator::make($request->all(), $rules, [], $attributes);
//※2 バリデーションエラーがある場合は、バリデーションエラーとpostデータを保持して
//入力フォームにリダイレクトをおこなう。
if ($validator->fails()) {
return redirect('input_form)->withErrors($validator)->withInput();
}
カスタムバリデーションの追加
Laravel標準のバリデーション機能ではカバーできない特別なバリデーションがある場合、上記サンプルコードの※1と※2の間に以下のように任意のバリデーションを追加することができます。
//任意のバリデーションを追加
$validator->after(function($validator) use($request) {
//例)入力された残り時間(remain_time)が15分刻みであるかをバリデート
$remain_time = intval($request->remain_time);
if($remain_time%15!=0){
$validator->errors()->add('remain_time', '残り時間は15分刻みで入力してください');
}
});
木曜日担当:nishida
nishida at 2022年09月01日 10:00:00