スポンサードリンク
CakePHPでフォームを作成しているときに
バリデーションで少し悩んだので
バリデーションで悩みを自分なりに消化できたので
その覚書です。
スポンサードリンク
requireとallowEmptyの違い
あまり疑問に思わなかったのですが
バリデーション書くときに
requireとallowEmptyの違いで???となってしまいました。
require | 必須項目の時にはture |
---|---|
allowEmpty | 空文字を許可する場合はtrue |
どっちも同じような意味にとれてしまって
片方だけでもいいじゃんと思っていたんですが
ちゃんと違いがあったんです。
こちらに解説が載ってました。
[CakePHP] バリデーションのallowEmptyとrequiredを解説してみる
こちらで解説してあるのを見ると
allowEmpty | フィールドがある場合に値の有無をチェック |
---|---|
required | フィールドの有無をチェック |
つまり、requireを設定すると
テーブルにフィールドがあればチェックするということになります。
前回、パスワードを変更するにあたり
パスワード変更は別の画面で行うことにしたため
usernameなどを別の編集画面で編集を行ったときに
なぜか、バリデーションエラーが出てたんですね。
エラーが出ているのがpasswordのフィールドだったんです。
編集画面にはパスワードの入力項目はないのに
なぜだろうと悩んでしました。
原因はこのバリデーションでrequireを設定していたためだったんです。
passwordフィールドにrequreを設定していたために
編集画面に入力項目はないのに
バリデーションチェックしていたんですね。
なので、requireを消してallowEmptyのみにしました。
こうすると、入力項目がないものは
バリデーションチェックしなくなりました。
バリデーションの書き方
次はバリデーションの書き方です。
バリデーションの書き方をおさらいしました。
バリデーションは以下のように書きます。
public $validate = array( 'filedname' => array( 'rule_name' => array( 'rule' => 'alphaNumeric', 'required' => true, 'allowEmpty' => false, 'message' => '表示するエラーメッセージ' ), 'rule_name' => array( ・・・ ) ) ); }
バリデーションをかけたいフィールド名を指定して
連想配列で指定していきます。
1つのフィールドに対してバリデーションルールを複数付けたい場合は
フィールド名の後にルール名(任意の名前)を付けて
その後にルールの内容を設定していきます。
requireやallowEmptyは最初のルールにだけ記述しておけばいいです。
スポンサードリンク
バリデーションの一時解除の方法
バリデーションを外したいコントローラーのアクション内に
//バリデートをキャンセル $this->[Model名]->validate = false;
と書きます。
スポンサードリンク