Laravelでのバリデーションの使い方|バリデーションルールの記述・エラーの表示と日本語化

エンジニア
マネージャー
Laravelでのバリデーションの使い方を紹介します!
今回は、Laravelでのバリデーションの使い方について説明します。バリデーションとは、入力規則に沿っているかチェックする機構のことです。Laravelでは、バリデーションが用意されているので、入力チェックを簡単に行うことができます。
例えば、
・必須入力項目を入力しているか?
・数字で入力しているか?
・文字列の場合、指定桁数の範囲内で入力しているか?
・e-mailの形式で入力しているか?
など、これ以外にも様々なチェックが行えます。
Laravelでのバリデーションに興味のある方はぜひご覧ください。
migrationファイル
バリデーションの前に、Laravelアプリケーションを作成してください。ここでは、以下のようなスキーマとします。id, name, age, emailのカラムを持ちます。
1 2 3 4 5 6 7 8 9 10 |
public function up() { Schema::create('my_users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->integer('age'); $table->string('email'); $table->timestamps(); }); } |
バリデーションルールの記述
Laravelのバリデーションはcontrollerに記述します。ここでは、データ登録時にバリデーションチェックします。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
/** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $myUser = new MyUser; // バリデーションの追加 $rules = [ 'name' => ['required', 'string'], 'age' => ['required', 'integer', 'between:1,99'], 'email' => ['required', 'email'] ]; $this->validate($request, $rules); // ここまで $myUser->name = request('name'); $myUser->age = request('age'); $myUser->email = request('email'); $myUser->save(); return redirect('/myusers'); } |
Laravelのバリデーションは複数チェックすることもできます。
requiredは必須項目、stringは文字列、integerは整数値、betweenは範囲指定、emailはe-mail形式のチェックが可能です。
バリデーションエラーの表示
バリデーションのチェック結果をviewに表示します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
<!DOCTYPE html> <html> <head> <title>User List</title> <!-- CSS And JavaScript --> <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:300,300italic,700,700italic"> <link rel="stylesheet" href="//cdn.rawgit.com/necolas/normalize.css/master/normalize.css"> <link rel="stylesheet" href="//cdn.rawgit.com/milligram/milligram/master/dist/milligram.min.css"> </head> <body> <div class="container"> <h1>User List</h1> <!-- Laravelバリデーションのエラー表示 --> @if(count($errors) > 0) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <form action="/myusers" method="POST" class="form-horizontal"> {{ csrf_field() }} <!-- User Name --> <div class="form-group"> <label for="myuser" class="col-sm-3 control-label">Name</label> <div class="col-sm-6"> <input type="text" name="name" id="myuser-name" class="form-control"> </div> <label for="myuser" class="col-sm-3 control-label">Age</label> <div class="col-sm-6"> <input type="text" name="age" id="myuser-age" class="form-control"> </div> <label for="myuser" class="col-sm-3 control-label">Email</label> <div class="col-sm-6"> <input type="text" name="email" id="myuser-email" class="form-control"> </div> </div> <!-- Add User Button --> <div class="form-group"> <div class="col-sm-offset-3 col-sm-6"> <button type="submit" class="btn btn-default"> <i class="fa fa-plus"></i> Add User </button> </div> </div> </form> <!-- Current Users --> <h2>Current Users</h2> <table class="table table-striped task-table"> <thead> <th>Name</th><th>Birthday</th><th>Email</th><th> </th> </thead> <tbody> @foreach ($myusers as $myuser) <tr> <!-- User Name --> <td> <div>{{ $myuser->name }}</div> </td> <td> <div>{{ $myuser->age }}</div> </td> <td> <div>{{ $myuser->email }}</div> </td> <td> <form action="/myusers/{{ $myuser->id }}" method="POST"> {{ csrf_field() }} {{ method_field('DELETE') }} <button>Delete User</button> </form> </td> </tr> @endforeach </tbody> </table> </div> </body> </html> |
何も入力せずに登録しようとすると、以下のメッセージが表示されます。
1 2 3 |
The name field is required. The age field is required. The email field is required. |
バリデーションエラーの日本語化
Laravelバリデーションのチェック結果はデフォルトでは英語で表示されます。日本語にする方法を紹介します。controllerを以下のように修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $myUser = new MyUser; // バリデーションの追加 $this->validate($request, [ 'name' => ['required', 'string'], 'age' => ['required', 'integer', 'between:1,99'], 'email' => ['required', 'email'], ], [ 'name.required' => ':attributeは必須です。', 'age.required' => ':attributeは必須です。', 'age.between' => ':attributeは:minから:maxまでです。', 'email.required' => 'メールアドレスは必須です。', ], [ 'name' => '名前', 'age' => '年齢', ]); // ここまで $myUser->name = request('name'); $myUser->age = request('age'); $myUser->email = request('email'); $myUser->save(); return redirect('/myusers'); } |
何も入力せずに実行すると、以下のメッセージが表示されます。
1 2 3 |
名前は必須です。 年齢は必須です。 メールアドレスは必須です。 |
氏名とメールアドレスを入力し、年齢に100などと入力して実行すると、以下のメッセージが表示されます。
1 |
年齢は1から99までです。 |
エンジニア
マネージャー
まとめ
いかがでしたでしょうか。Laravelでのバリデーションの使い方について説明しました。
controllerにバリデーションのルールを記述することで、簡単に入力チェックが可能です。複数のルールを指定することもできます。また、バリデーションエラーのメッセージを日本語化する方法についても紹介しました。
ぜひご自身でLaravelのソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


PHP新着案件New Job
ECサイトの開発/HTML/東京都千代田区/【WEB面談可】/在宅勤務
月給26万~26万円東京都千代田区(秋葉原駅)採用管理システム運用保守/Apache/東京都渋谷区/【WEB面談可】
月給50万~60万円東京都渋谷区(代々木駅)採用管理システム開発のテスター/Apache/東京都渋谷区/【WEB面談可】
月給25万~35万円東京都渋谷区(代々木駅)社内システムの開発/PHP/神奈川県相模原市/【WEB面談可】/在宅勤務
月給45万~60万円神奈川県相模原市(相模大野駅)販売管理システム開発支援SE/PHP/東京都渋谷区/【WEB面談可】/テレワーク
月給45万~60万円東京都渋谷区(新宿駅)採用管理システムリプレース、追加開発/Apache/東京都渋谷区/【WEB面談可】
月給42万~48万円東京都渋谷区(代々木駅)