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の無効化