バリデーションエラーメッセージの取得
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!としておけばいいですし。
関連記事
-
-
Cookieログイン
今回は、ログイン画面でよくみかけるクッキーログインの機能を使ってみます。 CakePHPには、Cookieコンポーネントがあります。(PHPのsetcookieメソッドのラッパー)メソッドはwr
-
-
CakePHP インストール時エラーの対処
CakePHPインストール時に出くわすであろうエラーの原因と対処方法についてまとめてみました。前提として、WebサーバはApache、データベースはMySQLとしています。 Timezone未設
-
-
FullCalendarを使用してカレンダーアプリケーション
カレンダーアプリケーションを作成するため、カレンダー表示できるプラグインを探索して出会ったFullcalendarを試してみました。シンプルに使用できる上に、オプションがかなり豊富です。ダウンロード
-
-
ハッシュ関数の選択とハッシュ化処理
CakePHPでは、ログイン時にはpasswordを自動的にハッシュ化して認証を行ってくれますが、そのパスワードを登録する際は、明示的にハッシュ化する必要があります。 ハッシュ関数の選択 ハッ
-
-
Formヘルパーのinputタグのdiv/labelなどの設定
Formヘルパーのinputではデフォルトでは以下のようにdivで囲われて、labelが付与されて出力されます。 CSSのフレームワークなどであらかじめ決まったスタイルがある場合に便利に作られていま
-
-
多言語サイト向けに翻訳ファイルを使って翻訳を行う
CakePHPには、翻訳をビヘイビアを使用する方法と翻訳ファイルを使用する方法の2つがあるそうです。(他にもあるのかな?) 今回は、翻訳ファイルを使用して言語の切り替えを行い、その言語設定をCook
-
-
selectボックスを実装
今まで、selectボックスのgroupを作成するのにSet::Combineを使用していましたが、意外と簡単にできることに気付いてしまったので、ご紹介。(自分だけ知らなかったことに気付いた と言った
-
-
CakeEmailでメール送信(@gmail)
CakePHP 2になって追加されたクラスCakeEmailがシンプルに使えます。これを使用してメール送信を行う処理を実装してみました。 CakeEmailクラスの読み込み /app/Config
-
-
SQLクエリーをログに出力する
SQLのクエリーをデバッグするには、Debug Kitを使用すればできますが、デバッグログと一緒に出したいのでやり方を調査してみました。 別々のログやビューでみるのもいいですが、秒単位で実行される処
-
-
日付・時間のバリデーション
日付や時刻に関するバリデーションは以下のルールがビルトインされています。 date 日付 time 時刻 datetime 日時 (m:「月」を数字表記 / M:「月」を英語表記)



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