
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;
と書きます。
