cakePHPでnotEmptyのvalidationが動かない場合
そ、そんな馬鹿な、一番簡単なvalidationが動かない・・・。 私の場合は、以下の原因で上手く動作してませんでした。 困った方の助けになれば・・・。
(1) そもそもformHelperのForm->createで誤ったModel名を指定していた。
UserにすべきところがUsersになってました。問題外・・・。
(2) controller側でも誤ったModel名でvalidateメソッドを呼び出していた。
$this->User->validate()にするべき所が、Usersになってました。 バリデーションを指定したModelを呼び出して無いから、上手く行く訳がない・・・
(3) controller側で、requestパラメータをセットしてなかった。
明示的にvalidationを呼び出していたので、modelのcreate()、set()を呼び出していなかったため、validateメソッドを読んだところで 空振っているだけで、validationがかからなかった。 下記のように、requestをきちんとセットした上でvalidateメソッドを呼べばOK。
1 | $this->User->set($this->request->data); |
注)ここから下は、validateは動いているしemailバリデーションは効いているのにnotEmptyだけどうしても動かなかったことの原因
(4) HTML5のrequiredが効いてしまっていて、submit後のチェックまでいけなくなっていた。
原因が解説されているサイト - CakePHP2.3からinputタグにhtml5のrequired属性がつくようになった ただし、validation設定のallowEmptyをtrueに設定するとnotEmptyと真逆の意味になってvalidateがかからない(意味ねーw) 結局、解説サイトの最後にあるようにformのcreate時にオプションで「array(‘novalidate’ => true)」を設定してやることで解決。 まあ、cakePHP歴が浅いのが原因とはいえ、意外と手こずらされた。