CakePHP 一部のバリデーションルールを解除する
notoです。
CakePHPでバリデーションルールの一部を解除したいときがあるかと思いますが、今回はその方法についてです。
Cakeはバリデーション機能が優秀だと思いますが、例えば「パスワードを忘れたら」などの機能で
E-mailを入力させてメールを送信する際に、バリデーションを行うことがあるかもしれません。
isUniqueをバリデーションルールとして定義しておくと、入力されたメールアドレスが既に登録されているので、バリデーションエラーが発生してしまいます。
そこで、バリデーションを行う前に、isUniqueを外しておきたいとなるわけです。
バリデーション定義
emailフィールドに、このようなバリデーションが定義されているとします。
app/model/user.php
/**
* バリデーション
*/
public $validate = array(
'email' => array(
'isUnique' => array(
'rule' => 'isUnique',
'message' =>'* 入力されたメールアドレスは既に登録されています。'
),
'email' => array(
'rule' => array('email',true),
'message' =>'* 正しいメールアドレスを入力してください。'
),
'notEmpty' => array(
'rule' => 'notEmpty',
'message' =>'* メールアドレスを入力してください。'
)
)
);
一部のバリデーションを解除
バリデーション定義はUserモデルのvalidateプロパティにセットされているので、解除したいルールをunsetしてあげると、そのバリデーションルールはなかった事にされるわけです。
app/controller/users_controller.php
//ユニークバリデーションを解除
unset($this->User->validate['email']['isUnique']);
if($this->User->validates()){
//hogehoge
}
バリデーションルールの解除方法でした。
逆に特定の処理だけvalidateプロパティに、バリデーションルールを追加するってこともできるはずです。やったことないけど。。。

コメント 0