バリデーションエラーメッセージの取得
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 インストール時エラーの対処
CakePHPインストール時に出くわすであろうエラーの原因と対処方法についてまとめてみました。前提として、WebサーバはApache、データベースはMySQLとしています。 Timezone未設
-
-
(メール・URL・電話・郵便・IP) データ バリデーション
今回は、プロフィール情報に使用されるデータに絞ったバリデーションルールです。 バリデーションルール 以下の5つのバリデーションルールがコアに用意されています。 email メールアドレス
-
-
複数ファイルアップロードフォーム
CakePHP 2.0からはHTML5が標準でサポートとなり、複数ファイルアップロードのためのフォーム記述が容易になりました。 View (ビュー) 配列 Array (
-
-
ログローテーション
CakePHP 2.xではbootstrap.php内にあらかじめアプリケーションログの設定が書かれています。2.xで日付ごとにログファイルが切り替わるよう設定してみました。 日ごとにログを切り替え
-
-
Formヘルパーのinputタグのdiv/labelなどの設定
Formヘルパーのinputではデフォルトでは以下のようにdivで囲われて、labelが付与されて出力されます。 CSSのフレームワークなどであらかじめ決まったスタイルがある場合に便利に作られていま
-
-
入力文字列の長さ(文字数)をバリデーション
CakePHP 2には、コアバリデーションに文字列の長さを検証する関数が用意されています。 文字列長(コア)バリデーション minLength - 最小文字数以上であること maxLengt
-
-
selectボックスを実装
今まで、selectボックスのgroupを作成するのにSet::Combineを使用していましたが、意外と簡単にできることに気付いてしまったので、ご紹介。(自分だけ知らなかったことに気付いた と言った
-
-
独自のバリデーションルールを作成
CakePHPで組み込みバリデーションルールをつくる方法は、正規表現を定義する方法と独自メソッドを定義する方法の2つがあるようです。 参考 Custom Validation Rules 正規
-
-
CakeEmailでメール送信(@gmail)
CakePHP 2になって追加されたクラスCakeEmailがシンプルに使えます。これを使用してメール送信を行う処理を実装してみました。 CakeEmailクラスの読み込み /app/Config
-
-
ハッシュ関数の選択とハッシュ化処理
CakePHPでは、ログイン時にはpasswordを自動的にハッシュ化して認証を行ってくれますが、そのパスワードを登録する際は、明示的にハッシュ化する必要があります。 ハッシュ関数の選択 ハッ



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