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