2015年4月26日日曜日

Laravel5で複数チェックボックスのバリデーションを行う、required_without_all

Laravel5で開発中に、複数checkboxのvalidationが必要になった。少なくとも一つにチェックをつけているかどうかをバリデーションすることになった。

Laravel5には、そのためピタリなValidation ruleがある。hoge required_without_all:foo,bar,...というvalidation ruleがそれだ。hogeは、hoge以外のcheckboxが全て未チェックなら、チェックされなくてはならない。それは、つまり、少なくとも一つがチェックされていなければならないことと同じになる。

複数checkboxをvalidateするための、Request.php、Controller.php、test.blade.php、testconfirm.blade.phpの実例をご紹介します。

test.blade.php
{!! Form::checkbox('service0', '人間', null) !!}人間<br>
{!! Form::checkbox('service1', 'チンパンジー', null) !!}チンパンジー<br>
{!! Form::checkbox('service2', 'ゴリラ', null) !!}ゴリラ<br>
{!! Form::checkbox('service3', 'オランウータン', null) !!}オランウータン<br>

testconfirm.blade.php
{{ Input::get('service0') }}{!! Form::hidden('service0', Input::get('service0')) !!}
{{ Input::get('service1') }}{!! Form::hidden('service1', Input::get('service1')) !!}
{{ Input::get('service2') }}{!! Form::hidden('service2', Input::get('service2')) !!}
{{ Input::get('service3') }}{!! Form::hidden('service3', Input::get('service3')) !!}
// 戻るボタンで戻ったときに入力値を維持しているようにしている

Request.php
public static function rules() {
    return [
        'service0'=>'required_without_all:service1,service2,service3',
        'zip21'=>'required',
        'zip22'=>'required',
        'addr21'=>'required',
        'name'=>'required',
        'email'=>'required|email|confirmed',
        'content'=>'required'
    ];
}

Controller.php
// checkboxのチェックされなかった項目の特別な処理をする。 入力後、内容はメール送信している。
if(isset($input['service0'])){
    Session::put('service0', $input['service0']);
}else{
    Session::put('service0', '');
}

if(isset($input['service1'])){
    Session::put('service1', $input['service1']);
}else{
    Session::put('service1', '');
}

if(isset($input['service2'])){
    Session::put('service2', $input['service2']);
}else{
    Session::put('service2', '');
}

if(isset($input['service3'])){
    Session::put('service3', $input['service3']);
}else{
    Session::put('service3', '');
}


Laravel5のマニュアル http://laravel.com/docs/5.0/validation#available-validation-rules
 

0 件のコメント:

コメントを投稿