【发布时间】:2013-05-10 21:11:16
【问题描述】:
我有一个注册表单,允许用户在表单字段email_or_phone 中输入他们的电子邮件或电话号码。我编写了一个验证函数,我在rules() 函数中使用它来确保提交的值是有效的电子邮件或电话号码。然后将该值分配给afterValidation() 函数中的正确模型属性。
我的问题是,模型属性 email 和 phone 应该是唯一的。我编写了afterValidation() 函数来测试针对相应表列的唯一性。但是代码不起作用。下面是我的afterValidation() 函数:
protected function afterValidate(){
parent::afterValidate();
if(!$this->hasErrors() && $this->isNewRecord){
$validator = new CEmailValidator;
if($validator->validateValue($this->email_or_phone)){
$validator = new CUniqueValidator;
$validator->attributeName = 'email';
$validator->validate($model, 'email_or_phone');
if(!$this->hasErrors()) $this->email = $this->email_or_phone;
}else{
$validator = new CUniqueValidator;
$validator->attributeName = 'phone';
$validator->validate($model, 'email_or_phone');
if(!$this->hasErrors()) $this->phone = $this->email_or_phone;
}
}
}
我做错了什么?
【问题讨论】:
-
你可以使用 Yii 内置的唯一验证器。参考:yiiframework.com/doc/api/1.1/CUniqueValidator
标签: php validation yii