コントローラ内でバリデーション処理を呼び出す

CakePHPでは、saveメソッドの際にバリデーション処理も自動で行われますが、save処理と切り離してバリデーションを行うこともできます。このときは、save時と若干異なる処理体系になります。
バリデーションをsaveから切り出して行う
ポイントは、1.のvalidatesの前にデータ($this->request->data)をdataをModelにsetする必要があるところです。(「若干異なる処理体系」とはここのことです。)この処理を行わないとvalidatesは常にtrueを返します。
validatesメソッド内で、invalidFieldsメソッドが呼び出されます。このメソッドは[Model]->validationErrorsにバリデーションのエラーメッセージ(message)を格納します。バリデーションNGの場合、ここからメッセージの取り出しが可能です。
// 1. モデル[Model]にデータを設定 $this->[Model]->set( $this->request->data ); // 2. モデル[ModelName]のvalidatesメソッドを使ってバリデーションを行う。 if ($this->[Model]->validates()) { // バリデーションOKの場合の処理 } else { // バリデーションNGの場合の処理 $this->log( $this->[Model]->validationErrors, LOG_DEBUG); }
フィールドを限定してバリデーションを行う
fieldListでフィールド名を指定すると、そのフィールドに対してのみにバリデーションを行います。以下の例だとUserモデル内のusernameとpasswordのみ
$this->User->set( $this->request->data ); if ($this->User->validates( array( 'fieldList' => array( 'username', 'password')))) { // バリデーションOKの場合の処理 } else { // バリデーションNGの場合の処理 }
複数レコードのバリデーション
複数レコードに対してバリデーションを行いたい場合は、saveAllで「'validate' => 'only'」を指定することで実現できます。
if ($this->[Model]->saveAll( $this->request->data, array( 'validate' => 'only'))) { // バリデーションOKの場合の処理 } else { // バリデーションNGの場合の処理 $this->log( $this->[Model]->validationErrors, LOG_DEBUG); }
saveAllの方法は、saveManyの項を参照:saveMany
確認したところ、[Model]->validationErrorsにレコードごとにバリデーションエラーメッセージを格納してくれます。
// 例 $this->log( $this->[Model]->validationErrors, LOG_DEBUG); Array ( [0] => Array ( [field] => Array ( [0] => error message ) ) [1] => Array ( [field] => Array ( [0] => error message ) ) )
save内のvalidateをスキップ
save前にvalidatesを行った際には、「'validate' => false」を指定することでsave内でのバリデーションを行わなくなります。
// saveもしくはsaveAll if ($this->[Model]->save( $this->request->data, array( 'validate' => false))) { // save OKの場合の処理 }
関連記事
-
-
(メール・URL・電話・郵便・IP) データ バリデーション
今回は、プロフィール情報に使用されるデータに絞ったバリデーションルールです。 バリデーションルール 以下の5つのバリデーションルールがコアに用意されています。 email メールアドレス
-
-
ハッシュ関数の選択とハッシュ化処理
CakePHPでは、ログイン時にはpasswordを自動的にハッシュ化して認証を行ってくれますが、そのパスワードを登録する際は、明示的にハッシュ化する必要があります。 ハッシュ関数の選択 ハッ
-
-
数値系バリデーション
CakePHP 2になっていくつか数値用バリデーションルールが追加されています。 数値用 (コア)バリデーション decimal - 十進数であること numeric - 数値であること
-
-
RSSフィードの取得
コンロトーラ public function getrssfeed() { try { $newsItems = $this->Rss->read( 'http://
-
-
Markdown Plugin
「Markdown CakePHP Plugin」は、MarkDown書式をレンダリングしてくれるビューヘルパーです。MarkDownについて勉強しているうちに出会ったので試し打ちです。 ダウンロー
-
-
DebugKitを導入
定番のブログチュートリアルをこなして、定番のDebugKitを導入してみました。 2.3からはCakePHPインストール直後に以下のように導入を推奨するような警告メッセージが表示されるようになりまし
-
-
CakePHP 2.x インストール
現在まで私が商用・非商用にリリースしているCakePHPアプリケーションは全て1.3.xベースで作成しています。 まだまだロードマップ的には大丈夫そうですが、お客さん向けに納品しているアプリケーショ
-
-
入力文字列の長さ(文字数)をバリデーション
CakePHP 2には、コアバリデーションに文字列の長さを検証する関数が用意されています。 文字列長(コア)バリデーション minLength - 最小文字数以上であること maxLengt
-
-
Js/Cssファイルの読み込みや出力する方法
CakePHPのHTMLヘルパーにはjsファイルやcssファイルを読み込むためのメソッドが用意されています。ファイルを読み込むのに加えて、出力先を複数指定できるようになっています。 また、インライン
-
-
Cookieログイン
今回は、ログイン画面でよくみかけるクッキーログインの機能を使ってみます。 CakePHPには、Cookieコンポーネントがあります。(PHPのsetcookieメソッドのラッパー)メソッドはwr
Comment
[…] ・CakePHP 2.x – コントローラ内でバリデーション処理を呼び出す […]