渡されたデータのチェックを行う機能のことをバリデーションといい、デフォルトのバリデーションはhoegTable.phpで書かれる。チェックしたいフィールドに対してルールを書き足していくような書き方をする。
<?php use Cake\Validation\Validator; public function validationDefault(Validator $validator) { $validator ->notEmpty('title') ->requirePresence('title') ->notEmpty('body') ->requirePresence('body') ->add('body', [ 'length' => [ 'rule' => ['minLength', 10], 'message' => 'body length must be 10+' ] ]); return $validator; }
引数にValidatorクラス(Cake\Validation\Validator)のインスタンスが渡される。このクラスがvalidationを管理し、渡されたvalidatorはエンティティの保存作業が行われるときに利用される。
バリデーションルールの追加
<?php $validator->add(フィールド, [ ルール設定 ]); $validator->add(フィールド, ルール名, ['rule'=> ルール設定 ]);
最初に書いたサンプルのように、第2引数のルール設定に連想配列を設定する書き方や
<?php $validator->add( 'name','length',['rule'=>['minLength',6]] );
のような書き方をすることができる。
addで設定する主なバリデーションルールはこちら
短縮した書き方
<?php $validator ->email('username') ->ascii('username') ->lengthBetween('username', [4, 8]);
こんな書き方も可能。
https://book.cakephp.org/3.0/ja/core-libraries/validation.html#id6
※バリデーションのメソッドを提供しているのはValidatorクラスではなく、「プロバイダー」なるものから提供されている。デフォルトのプロバイダーは、Validation\Validation のクラスにマッピングされているとのこと。
https://book.cakephp.org/3.0/ja/core-libraries/validation.html#id7
また、CakePHP3でバリデーションはコントローラークラスのadd()やedit()処理内のsave()でエンティティの保存を行う際に自動で行われる。