WinRoadのLaravel4初心者講座

次世代PHPフレームワークのLaravel4を初心者向けに解説して参ります。

Winroad徒然草の管理人がお届けします
カスタムエラーメッセージ

カスタムエラーメッセージ

このエントリーをはてなブックマークに追加

Laravelのバリデーションエラーメッセージは、デフォルトのエラーメッセージを簡単に書き換えることが出来ます。

バリデーターにカスタムメッセージを渡す

Validator::makeメソッドの第3引数にカスタムメッセージを渡すことで、デフォルトのエラーメッセージを書き換えることが出来ます。

(例)app/controllers/UserController.php

public function getCreate(){
 return View::make('/user/create');
 }
 public function postCreate(){
 $inputs=Input::all();
 $rules=[
 'name'=>'required',
 'email'=>'required|email',
 'password'=>'required|min:4'
 ];
 //カスタムメッセージ
 $messages=['required'=>':attribute項目は必須です。'];
 $val=Validator::make($inputs,$rules,$messages);
 if($val->fails()){
 return Redirect::back()
 ->withErrors($val)
 ->withInput();
 }
 $user=User::create($inputs);
 return Redirect::to('/user/list');
 }
  • 12行目:カスタムエラーメッセージを配列で作成します。:attributeプレースホルダーは、バリデーション中のフィールド名(name,email,password)に置き換わります。
  • 13行目:作成したカスタムエラーメッセージをValidatro::makeメソッドの第3引数に指定します。
  • 16行目:withErrors($val)で引き渡したエラーメッセージは、ビュー内で$errors->first(‘フィールド名’)や$errors->all()メソッドで取り出すことが出来ます。

特定のフィールドにカスタムメッセージを指定する

特定のフィールド(例えば、email)だけにカスタムエラーメッセージを指定することも出来ます。上記の12行目を下記のように修正します。

$messages=[
 'required'=>':attribute項目は必須です。',
 'email.required'=>'メールアドレスを入力してください。'
 ];

上記例は、下記のように表示されます。

laravel040 

言語ファイルにカスタムメッセージを指定する

いちいちバリデーションエラーメッセージを書き換えるよりも、言語ファイルに指定しておいた方が、便利です。app/lang/ja/validation.php言語ファイルのcustom配列にメッセージを追加してみましょう。

Laravel日本語版をインストールしている場合、app/lang/jaフォルダ内に、pagination.php、reminders.php、validation.phpファイルが既にあると思います。覗いてみてください。

川瀬裕久氏のご尽力で、既にデフォルトのエラーメッセージを作成して頂いています。

validation.phpファイルの83行目に’custom’=>array(),と記述されていると思います。ここに、カスタムメッセージを作成してみましょう。

‘custom’ => [‘email’=>[‘required’=>’メールアドレスを入力してください’]],

  • これで、emailアドレスのrequiredのみ、エラーメッセージが変更になります。尚、ここで、指定していても、Validator::makeメソッドの第3引数に渡したエラーメッセージの方が優先されますので、ご注意ください。

カスタムバリデーション属性名の変更

デフォルトのエラーメッセージでは、属性名:attributeはフィールド名を表示しますので、上記のようにpasswordは必須です。のように表示されて、あまりフレンドリーではありません。

場合によっては、コントローラ内でカスタムエラーメッセージを作成してもいいのですが、頻繁に使用する属性名は、先に作成しておくのも一つの方法です。

そこで、app/lang/ja/validation.phpの96行目に頻繁に使用する可能性のある属性名を指定してみましょう。

'attributes' => [
 'name'=>'名前',
 'email'=>'メールアドレス',
 'password'=>'パスワード',
 ],

下記のようにかなりユーザビリティがよくなりました。

laravel041 

« »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です