Yii:规则验证中的唯一电子邮件地址不起作用

时间:2014-02-18 21:04:38

标签: yii

我构建了一个显示用户现有电子邮件的表单,然后要求提供新电子邮件和确认电子邮件,以确保他们已正确输入。新电子邮件的字段为“new_email”,确认字段为“new_email_confirm”。该模型已经存储了“电子邮件”字段,其中存储了现有的电子邮件地址。使用的方案是'change_email'。其他所有规则都有效,并且在我的模型中验证错误但是这个...当我输入完全相同的电子邮件/确认已经在“电子邮件”中收到时我没有收到错误,可以保存。< / p>

在规则中,我添加了以下内容:

  array(
    'new_email,new_email_confirm',
    'required',
    'message'=>'This is a required field',
    'on'=>'change_email',
  ),
  array(
    'new_email',
    'email',
    'message'=>'Invalid email address',
    'on'=>'change_email',
  ),
  array(
    'new_email',
    'compare',
    'compareAttribute'=>'new_email_confirm',
    'message'=>"Emails don't match",
    'on'=>'change_email',
  ),
  array(
    'new_email',
    'unique',
    'className'=>'User',
    'attributeName'=>'email',
    'on'=>'change_email',
  ), 

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我有两个不好的建议,因为我无法找出确切的问题。

1-为唯一性编写自定义验证并删除unique规则:

array('new_email','customValidationRule'),

并写如下:

public function customValidationRule(){
    //after all validation rules
    if(!$this->hasErrors()){
        $check=User::model()->findByAttributes(array('email'=>$this->new_email)); //or $this->new_email_confirm
        if(!is_null($check) || !empty($check)){
            $this->addError('new_email','The new email has been already taken by other!');
        }
    }
} 

2-在new_email规则中将new_email_confirm替换为unique