[Laravel] カスタムバリデーションの追加

今回は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



アプリ関連ニュース

お問い合わせはこちら

お問い合わせ・ご相談はお電話、またはお問い合わせフォームよりお受け付けいたしております。

tel. 06-6454-8833(平日 10:00~17:00)

お問い合わせフォーム