N_OR’s diary

無職が何か言ってる

laravelでのvalidation処理1

いろいろやり方はあるみたい。 以下はコントローラ中に処理を書くやり方。 Requestクラスで用意されているvalidateメソッドを使う。 参考

/** 
* ユーザ情報更新 
*/ 
public function postEditUser(Request $request) 
{ 
    $request->validate( 
    // チェック内容 
    [ 
        'id' => 'required', 
        'name' => 'required', 
        'email' => 'required', 
    ], 
    // エラー文言 
    [ 
        'id.required' => ':attributeは必須です。', 
        'name.required' => ':attributeは必須です。', 
        'email.required' => ':attributeは必須です。', 
    ], 
    // attribute 
    [ 
        'id' => 'ID', 
        'name' => '名前', 
        'age' => '年齢' 
    ] 
    );
   
 // 以下正常時の処理 
} 

validateメソッドの結果、リクエスト不正が起こったときは例外(exception)が発生する。 このやり方の場合、例外発生時はエラーの値とともに現在のページにリダイレクトされるらしいので、ここではキャッチしないのがおそらく正解。

例外でリダイレクトされるとblade側で@errorディレクティブが有効になるようなのでエラー処理はblade側に記載できていれば良さそう。

このやり方、ajaxでエラーチェックする場合は出番無いと思う。

なお、例外時、exceptionには以下のような値が入っている。 httpのステータスコードとしては422を返そうとしているのが分かる。

{ 
    "validator": { 
        "customMessages": { 
            "id.required": ":attributeは必須です。", 
            "name.required": ":attributeは必須です。", 
            "email.required": ":attributeは必須です。" 
        }, 
        "fallbackMessages": [], 
        "customAttributes": { 
            "id": "ID", 
            "name": "名前", 
            "age": "年齢" 
        }, 
        "customValues": [], 
        "extensions": [], 
        "replacers": [] 
    }, 
    "response": null, 
    "status": 422, 
    "errorBag": "default", 
    "redirectTo": null 
}