バリデーションエラーメッセージの取得

CakePHP 2.xになってバリデーションエラー時に返却されるメッセージのデータ形式が変更になったようです。1.3系では、ひとつのフィールドに対して返却されるメッセージは一つのルールのみですが、2.xではエラーとなったルールのメッセージが配列になって返されます。
複数ルールを設定して、全てのルールを実行する方法(2.x系・1.3系共通)
バリデーションはモデルの$validateに設定した各ルールを上から行っていきます。デフォルトでは、ひとつのルールがエラーとなるとそのフィールドに対するバリデーションを停止しますが、'last'=>falseを設定するとエラー有無にかかわらず後続のバリデーションルールも実行するようになります。3つある場合は、1つ目・2つ目に設定するようなかたちになります。
// 例 var $validate = array( 'errormsgtest' => array( 'email' => array( 'rule' => array( 'email'), 'message' => 'Not email!', 'last' => false ), 'notempty' => array( 'rule' => array( 'notEmpty'), 'message' => 'Empty!', ), ), );
validationErrorsとvalidateErrors
バリデーション処理後、エラーがあった場合、
$this->[Model名]->validationErrors
を使用してエラーメッセージを取得することができます。
似たようなもので
$this->validateErrors
がありますがコレ自体でバリデーション処理を行います。二重にvalidatesしないよう"validationErrors"の方を使うようにして下さい。
エラーメッセージの内容(1.3系では)
最後にエラーとなったバリデーションのメッセージを返します。上の例でいうと、入力値('errormsgtest')がブランクの場合、
- デフォルトの状態('last'がtrue)では、ルール名'email'でバリデーションを終了させるため、Not email!'
- 'last'をfalseに設定した場合は、ルール'email'がエラーとなっても最後('notempty')までバリデーションを実行するため、'Empty!'
が返却されます。
// ログに出力 $this->log( $this->[Model名]->validationErrors, LOG_DEBUG); // viewに渡す $this->set( 'valerror', $this->[Model名]->validationErrors); // セッションに渡す $this->Session->setFlash( $this->[Model名]->validationErrors); // ログ出力例 // 'last' => trueの場合 Array ( [errormsgtest] => Not email! ) // 'last' => falseの場合 Array ( [errormsgtest] => Empty! )
エラーメッセージの内容(2.x系では)
やっと本題。配列で返します。
'errormsgtest'がブランクだった場合は、
- デフォルトの状態('last'がtrue)では、ルール名'email'でバリデーションを終了させるため、'Not email!'のみ
- 'last'をfalseに設定した場合は、ルール'email'がエラーとなっても最後('notempty')までバリデーションを実行するため、'Not email!'と'Empty!'
が返却されます。
// ログに出力 $this->log( $this->[Model名]->validationErrors, LOG_DEBUG); // viewに渡す $this->set( 'valerror', $this->[Model名]->validationErrors); // セッションに渡す $this->Session->setFlash( $this->[Model名]->validationErrors); // ログ出力例 // 'last' => trueの場合 Array ( [errormsgtest] => Array ( [0] => Not email! ) ) // 'last' => falseの場合 Array ( [errormsgtest] => Array ( [0] => Not email! [1] => Empty! ) )
今回は、バリデーションエラーメッセージのデータの取り扱いについてでした。
基本的には、'last'=>falseを多用するより、エラーメッセージの伝え方でユーザに入力をうまいことやってもらうのが一番いいですよね~。
上の例でいうと、どちらもEnter email!としておけばいいですし。
関連記事
-
-
コントローラ内でバリデーション処理を呼び出す
CakePHPでは、saveメソッドの際にバリデーション処理も自動で行われますが、save処理と切り離してバリデーションを行うこともできます。このときは、save時と若干異なる処理体系になります。
-
-
日付・時間のバリデーション
日付や時刻に関するバリデーションは以下のルールがビルトインされています。 date 日付 time 時刻 datetime 日時 (m:「月」を数字表記 / M:「月」を英語表記)
-
-
Jsヘルパーを使用してAjax更新
更新処理でページ遷移を伴う場合、ページ全体をレスポンスするのに対して、Ajax処理ではページの一部のレスポンスが可能となるためサーバからの通信量を抑えることが可能となります。デモ head
-
-
Formヘルパーのinputタグのdiv/labelなどの設定
Formヘルパーのinputではデフォルトでは以下のようにdivで囲われて、labelが付与されて出力されます。 CSSのフレームワークなどであらかじめ決まったスタイルがある場合に便利に作られていま
-
-
FormヘルパーのMagicOption (マジックオプション)
Formヘルパーでは、「フィールド名」,「テーブルカラムのデータ型」もしくはモデルの「バリデーション設定」によりフォーム要素を決定したり、自動で属性を付与する「マジックオプション」と呼ばれるものがある
-
-
多言語サイト向けに翻訳ファイルを使って翻訳を行う
CakePHPには、翻訳をビヘイビアを使用する方法と翻訳ファイルを使用する方法の2つがあるそうです。(他にもあるのかな?) 今回は、翻訳ファイルを使用して言語の切り替えを行い、その言語設定をCook
-
-
Blowfishを使用してハッシュ化する
使用方法 Blowfishを採用してハッシュ化を行う場合、Securityクラスのhashメソッドを呼び出します。第2引数に'blowfish'を指定し、第3引数を指定しないもしくはfalseにしま
-
-
hasOne アソシエーション
hasOneアソシエーションはテーブル間で1つのレコードに対して他のテーブルに紐付くレコードが1つの場合にjoinする場合に使用します。 CakePHPのドキュメントにならってUserモデルとP
-
-
HttpSocketを使用してリクエスト送信
CakePHPには、Webサービスへのリクエスト送信のためのHttpSocketクラスが用意されています。 HttpSocket get HTTP GETリクエストを発行します。デモ H
-
-
テーブルからランダムにデータを取り出す(find)
CakePHPでテーブルから特定件数のレコードをランダムに取得するには以下のように指定するとできます。 $this->data = $this->Bulkdata->find( 'all',
Comment
バリデーションエラーメッセージの取得 https://t.co/hUbVQSNhoL
[…] 参考URL http://log.noiretaya.com/184 http://kwski.net/cakephp-2-x/1084/ […]
CakePHP 2.x | バリデーションエラーメッセージの取得 http://t.co/isqxlCfKio
CakePHP 2.x: バリデーションエラーメッセージの取得 | Think deeply, Do less, More effective http://htn.to/RAPeai