CakePHP3で遊ぶ


validationを動的に変更する

CakePHP3のvalidation

CakePHP3では、テーブルクラスのvalidation*()メソッドでバリデーターを登録します。
bakeコマンドでテーブルクラスを作成させると、validationDefault()メソッドが作成されていることがわかると思います。
ここでnotEmptyが設定されていると、Formヘルパーのcontrolメソッドで生成されるinputエレメントなどにrequired属性がセットされます。

tableとactionとvalidation

この機能は開発効率を上げるために大変便利で、筆者も大いに気に入っております。
しかし同じテーブルに書き込む場合でも、画面によって必須入力項目にしたかったり、したくなかったりすることがあります。そのような場合は、テーブルのカラムはNULLを許可するようにしておいて、各画面で必須入力項目にしたり、NULLを許可したりと切り替えたくなります。
そこで、action毎にvalidationを設定出来るようにしたいと思います。

まずテーブルクラスにvalidationDefault()メソッドを作成します。ここでは、DBのテーブルレイアウトに従って、allowEmpty('field', 'create')なフィールドとして設定します。
次に、DBのレイアウトとは異なったチェックを行うactionに次のようなコードを追加します。

    $validator = $this->Models->validator('default');
    $validator->notEmpty('field');

これで特定のactionの時だけ、必須入力項目とすることが出来るようになりました。

参考サイト

Cakephp3での特定カラムへのvalidationの無効化