cakePHPでnotEmptyのvalidationが動かない場合

2013-12-10

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
2
$this->User->set($this->request->data);
$this->User->validates();

  注)ここから下は、validateは動いているしemailバリデーションは効いているのにnotEmptyだけどうしても動かなかったことの原因  

(4) HTML5のrequiredが効いてしまっていて、submit後のチェックまでいけなくなっていた。

原因が解説されているサイト - CakePHP2.3からinputタグにhtml5のrequired属性がつくようになった ただし、validation設定のallowEmptyをtrueに設定するとnotEmptyと真逆の意味になってvalidateがかからない(意味ねーw)   結局、解説サイトの最後にあるようにformのcreate時にオプションで「array(‘novalidate’ => true)」を設定してやることで解決。 まあ、cakePHP歴が浅いのが原因とはいえ、意外と手こずらされた。