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 }