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

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

29 回閲覧されました

みなさんこんにちは、jonioです。

業務でCakePHPを使っているので仕組みを勉強していますが今回は新規作成・編集時のバリデーションについてのメモになります。

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の値があるか」という意味になります。

ここには他にも条件を付けることができます。

といった感じです。