CakePHP 3 バリデーションを使い分ける

CakePHP 3 バリデーションを使い分ける

どうもfujiharaです。
個人的には今年最後の記事になります。 本日はデータの保存時にバリデーションを変更する方法をご紹介いたします。

背景

アプリケーション開発時に機能によって バリデーションルールを追加したり、変えたいという事がありました。
CakePHP2の時と比べ個人的に便利になったと思うので、ご紹介致します。

以下に例を示します。

  • 1. アカウント登録時のバリデーション(基本バリデーションに追加したい)
  • 2. パスワード変更時のバリデーション(アカウント登録時のバリデーションも使いたい)

保存時の記述は以下のようになります。

1. $this->Accounts->save($account, ['validate' => 'accountRegistration']);
2. $this->Accounts->save($account, ['validate' => 'passwordReset']);

AccountsTable内の記述は以下になります。

1.
public function validationAccountRegistration(Validator $validator)
{
    $validator = $this->validationDefault($validator);
    $validator->add('xxxxx', '登録用ルール');
    return $validator;
}

2.
public function validationPasswordReset(Validator $validator)
{
    $validator = $this->validationDefault($validator);
    $validator = $this->validationAccountRegistry($validator);
    $validator->add('yyyy', 'リセット用ルール');
    return $validator;
}

説明

save時にオプションでvalidateパラメータを渡すをそれを使用したバリデーションを行ってくれます。
['validate' => 'check'] とすると AccountsTable内のvalidationCheck関数を参照してくれます。
save時に指定しない場合はvalidationDefault(デフォルト関数)を参照してくれます。 アカウント登録時にはvalidationDefault + アカウント登録用のルールを追加、パスワードリセットの時には アカウント登録+パスワードリセット用のルールを追加といった具合になります。

まとめ

今回は2つだけのバリデーションでしたが、データベースが複雑になってくると この機能が大変役に立つ場面が増えると思います。是非お試し下さい。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ