スポンサードリンク

CakePHP
CakePHP

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;

と書きます。

スポンサードリンク