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

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!としておけばいいですし。
関連記事
-
-
checkボックスを実装
selectボックスに引き続いてcheckボックスの実装方法をおさらいしてみます。 コードは、CakePHP 2と1.3両方で実装可能です。デモ モデルは、こちらも以下 CREATE TA
-
-
Blowfishを使用してハッシュ化する
使用方法 Blowfishを採用してハッシュ化を行う場合、Securityクラスのhashメソッドを呼び出します。第2引数に'blowfish'を指定し、第3引数を指定しないもしくはfalseにしま
-
-
RSSフィードの取得
コンロトーラ public function getrssfeed() { try { $newsItems = $this->Rss->read( 'http://
-
-
Cookieログイン
今回は、ログイン画面でよくみかけるクッキーログインの機能を使ってみます。 CakePHPには、Cookieコンポーネントがあります。(PHPのsetcookieメソッドのラッパー)メソッドはwr
-
-
独自のバリデーションルールを作成
CakePHPで組み込みバリデーションルールをつくる方法は、正規表現を定義する方法と独自メソッドを定義する方法の2つがあるようです。 参考 Custom Validation Rules 正規
-
-
FullCalendarを使用してカレンダーアプリケーション
カレンダーアプリケーションを作成するため、カレンダー表示できるプラグインを探索して出会ったFullcalendarを試してみました。シンプルに使用できる上に、オプションがかなり豊富です。ダウンロード
-
-
hasOne アソシエーション
hasOneアソシエーションはテーブル間で1つのレコードに対して他のテーブルに紐付くレコードが1つの場合にjoinする場合に使用します。 CakePHPのドキュメントにならってUserモデルとP
-
-
パス定数と変更方法やURLの取得
CakePHPは基本的にはディレクトリそのまま配置することで構築が可能ではありますが、設定パスを変更することでセキュリティに考慮した構成にすることや運用性をもたせたものにすることが可能になります。
-
-
CakePHP インストール時エラーの対処
CakePHPインストール時に出くわすであろうエラーの原因と対処方法についてまとめてみました。前提として、WebサーバはApache、データベースはMySQLとしています。 Timezone未設
-
-
ログローテーション
CakePHP 2.xではbootstrap.php内にあらかじめアプリケーションログの設定が書かれています。2.xで日付ごとにログファイルが切り替わるよう設定してみました。 日ごとにログを切り替え
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