読者です 読者をやめる 読者になる 読者になる

ほとラボ

It works!

CakePHP2でバリデーションエラーを取得する方法まとめ

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 だったり、本当にややこしい事この上ないな。

かしこ