Laravelのバリデーションを使ってみます。
サンプルコード
routes.php
Route::get('/post', 'PostController@getIndex'); Route::post('/post', 'PostController@postIndex');
app\Http\Controllers\PostController.php
post時にバリデーションチェックを行うようにします。
<?php namespace App\Http\Controllers; use Request; use Redirect; use Validator; class PostController extends Controller { public function getIndex() { return view('post.index'); } // バリデーションのルール public $validateRules = [ 'username'=>'required', 'number'=>'required|integer|digits:10', 'password'=>'required|min:8', 'mail'=>'required|email', 'age'=>'numeric', 'body'=>'max:500' ]; // バリデーションのエラーメッセージ public $validateMessages = [ "required" => "必須項目です。", "integer" => "整数で入力してください。", "number.digits" => "10桁で入力してください。", "password.min" => "8文字以上で入力してください。", "email" => "メールアドレスの形式で入力してください。", "numeric" => "数値で入力してください。", "body.max" => "500文字以内で入力してください。" ]; public function postIndex() { // postしたデータをすべて取得 $data = Request::all(); //バリデーションをインスタンス化 $val = Validator::make( $data, $this->validateRules, $this->validateMessages ); //バリデーションNGの場合 if($val->fails()){ return redirect('/post')->withErrors($val)->withInput(); } return 'OK!'; } }
Validatorのmakeメソッドでバリデーションのインスタンスを作成しています。
第1引数にバリデーションを行うデータ、第2引数にバリデーションのルール、第3引数にバリデーションのエラーメッセージを設定します。
post\index.blade.php
エラーの内容は$errorsから取得できます。
<form action="/post" method="POST" novalidate> <dl> <dt>ユーザー名<span class="required">(必須)</span></dt> <dd> <input name="username" type="text"> @if($errors->has('username'))<p class="error">{{ $errors->first('username') }}</p> @endif </dd> </dl> <dl> <dt>認証番号<span class="required">(必須・10桁)</span></dt> <dd> <input name="number" type="text"> @if($errors->has('number'))<p class="error">{{ $errors->first('number') }}</p> @endif </dd> </dl> <dl> <dt>パスワード<span class="required">(必須・8文字以上)</span></dt> <dd> <input name="password" type="text"> @if($errors->has('password'))<p class="error">{{ $errors->first('password') }}</p> @endif </dd> </dl> <dl> <dt>メールアドレス<span class="required">(必須)</span></dt> <dd> <input name="mail" type="text"> @if($errors->has('mail'))<p class="error">{{ $errors->first('mail') }}</p> @endif </dd> </dl> <dl> <dt>年齢</dt> <dd> <input name="age" type="text">歳 @if($errors->has('age'))<p class="error">{{ $errors->first('age') }}</p> @endif </dd> </dl> <dl> <dt>内容(500文字以下)</dt> <dd> <textarea name="body"></textarea> @if($errors->has('body'))<p class="error">{{ $errors->first('body') }}</p> @endif </dd> </dl> <div> <input type="submit" value="送信"> </div> <input type="hidden" name="_token" value="{{ csrf_token() }}"> </form>
以下のようなフォームができました。
何も入力せずに送信すると、以下のようになります。
桁数違いや正しくないメールアドレスを入力してみます。
以下のようにエラーが表示されました。
【参考サイト】
- バリデーション 5.1 Laravel
- エラーメッセージとビュー | WinRoadのLaravel4初心者講座
- Laravelのバリデーションで指定できる内容をざっくりまとめ直しました。 – Qiita
コメントが承認されるまで時間がかかります。