CakePHP3の新規作成・編集時のバリデーションについて

610 回閲覧されました
みなさんこんにちは、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の値があるか」という意味になります。
ここには他にも条件を付けることができます。
といった感じです。
