我构建了一个显示用户现有电子邮件的表单,然后要求提供新电子邮件和确认电子邮件,以确保他们已正确输入。新电子邮件的字段为“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',
),
我做错了什么?
答案 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
。