CakePHPのバリデーション機能って便利だよね。
でもvalidate()した後に結果を取得しようとすると、
- 「あれ、validateErrors だっけ? validationErrors だっけ?」
- 「そのフィールドがある場所って Controller だっけ? Model だっけ?」
- 「どんな形式で取得できたっけ???」
などと、いつも 記憶力の無さを露呈 混乱するので、忘れないように全部まとめてみた。
モデルにもコントローラにもある
そもそもが validationErrors?なるフィールドがどこにあるのかから迷うわけだが、
調べてみたところどっちにもあるじゃねーか。
モデルにあるやつ
- $validate
- $validationErrors
- function validates()
コントローラにあるやつ
- $validationErrors
- function validate()
- function validateErrors()
モデルにあるやつ
$validate
バリデーションの設定をするフィールド。おなじみ。
$validationErrors
バリデーション後にエラーメッセージが格納される場所。 ↓ こんな感じで取得できる
Array ( [フィールド名] => Array ( [0] => えらー!! ) )
function validates()
現在モデルに登録されている内容でバリデーションを実行する。 エラーがなければ true 、エラーがひとつでもあれば false を返す。
コントローラにあるやつ
$validationErrors
コントローラの validate(), validateErrors() を実行した時はここにもエラーメッセージが格納される。 モデルでバリデーションしただけじゃ格納されなかったりするので、このフィールドはあまり参照しないほうが良さげ。 コントローラ内でエラーメッセージを取得したいなら後述の validateErrors() で。
function validate( モデル1, モデル2, ... )
バリデーションを実行して、エラーの数を返す。
function validateErrors( モデル1, モデル2, ... )
バリデーションを実行して、エラーメッセージを返す。 ↓ 取得できる形式はモデルの $validationErrors と同じ。
Array ( [フィールド名] => Array ( [0] => えらー!! ) )
まとめ
モデル内だったら validates() して $validationErrors 、コントローラ内だったら validateErrors() でOKっぽい。
場所によって validate だったり validation だったり、本当にややこしい事この上ないな。
かしこ