CakePHP3の新規作成・編集時のバリデーションについて
125 回閲覧されました
みなさんこんにちは、jonioです。
業務でCakePHPを使っているので仕組みを勉強していますが今回は新規作成・編集時のバリデーションについてのメモになります。
おすすめ参考書
CakePHP3はまだまだ仕事で使われます。
下記の参考書がおすすめです。
リンク
1回目のバリデーション
最初のバリデーションはコントローラーの下記の部分で行われます。
$patchEntity = $table->patchEntity($entity, $data);
フォームに入力したりカラムに直接設定したデータを更新する時にバリデーションが動きます。
バリデーションは「CakePHPのプロジェクト > Model > Table > 〜Table.php」の「validationDefault」メソッドで行われます。
public function validationDefault(Validator $validator)
{
$validator
->integer('id')
->allowEmpty('id', 'create');
$validator
->scalar('name')
->maxLength('name', 255)
->requirePresence('name', 'create')
->notEmpty('name');
$validator
->scalar('mail')
->maxLength('mail', 255)
->requirePresence('mail', 'create')
->allowEmpty('mail');
return $validator;
}
nullが許容されるか文字数の制限などが記述されています。
2回目のバリデーション
次のバリデーションはコントローラーの下記の部分で行われます。
if ($this->Model->save($patchEntity)) {}
データをテーブルに保存する時です。
バリデーションは「CakePHPのプロジェクト > Model > Table > 〜Table.php」の「validationDefault」メソッドで行われます。
public function buildRules(RulesChecker $rules)
{
$rules->add($rules->existsIn(['user_id'], 'Users'));
return $rules;
}
上記のコードの3行目は「テーブルに情報が保存される時に現在のテーブルの外部テーブルにあたるusersテーブル(Usersより)にuser_idの値があるか」という意味になります。
ここには他にも条件を付けることができます。
といった感じです。