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プロパティに、バリデーションルールを追加するってこともできるはずです。やったことないけど。。。

return top