バリデーションエラーメッセージの取得
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!としておけばいいですし。
関連記事
-
-
SQLクエリーをログに出力する
SQLのクエリーをデバッグするには、Debug Kitを使用すればできますが、デバッグログと一緒に出したいのでやり方を調査してみました。 別々のログやビューでみるのもいいですが、秒単位で実行される処
-
-
独自のバリデーションルールを作成
CakePHPで組み込みバリデーションルールをつくる方法は、正規表現を定義する方法と独自メソッドを定義する方法の2つがあるようです。 参考 Custom Validation Rules 正規
-
-
入力文字列の長さ(文字数)をバリデーション
CakePHP 2には、コアバリデーションに文字列の長さを検証する関数が用意されています。 文字列長(コア)バリデーション minLength - 最小文字数以上であること maxLengt
-
-
多言語サイト向けに翻訳ファイルを使って翻訳を行う
CakePHPには、翻訳をビヘイビアを使用する方法と翻訳ファイルを使用する方法の2つがあるそうです。(他にもあるのかな?) 今回は、翻訳ファイルを使用して言語の切り替えを行い、その言語設定をCook
-
-
ユーザ登録(仮登録・メール・本登録)
以前1.3版で投稿した「ユーザ登録」処理の2.x版を作成しました。フローは同じで以下のようにします。 1. メールアドレス・パスワードでユーザ登録 2. この時点では仮登録として、本登録用のU
-
-
FullCalendarを使用してカレンダーアプリケーション
カレンダーアプリケーションを作成するため、カレンダー表示できるプラグインを探索して出会ったFullcalendarを試してみました。シンプルに使用できる上に、オプションがかなり豊富です。ダウンロード
-
-
バリデーション前後に処理を追加できる「beforeValidate」「afterValidate」
CakePHPでは、「beforeValidate」「afterValidate」というバリデーション処理の前後で追加の処理を実装できるコールバック関数が用意されています。 beforeVali
-
-
CakePHP インストール時エラーの対処
CakePHPインストール時に出くわすであろうエラーの原因と対処方法についてまとめてみました。前提として、WebサーバはApache、データベースはMySQLとしています。 Timezone未設
-
-
HttpSocketを使用してリクエスト送信
CakePHPには、Webサービスへのリクエスト送信のためのHttpSocketクラスが用意されています。 HttpSocket get HTTP GETリクエストを発行します。デモ H
-
-
Blowfishを使用してハッシュ化する
使用方法 Blowfishを採用してハッシュ化を行う場合、Securityクラスのhashメソッドを呼び出します。第2引数に'blowfish'を指定し、第3引数を指定しないもしくはfalseにしま



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