2016-11-14 108 views
0

Im在Yii1验证时遇到了问题。我有联系人类型的列表框,我希望电子邮件验证只有在通过电子邮件联系时才能使用。因此,即时通讯使用的自定义规则,以检查其是否不为空:yii1有特殊条件的验证规则

public function customEmailValidation($attribute, $params) 
{ 
    if(!$this->hasErrors()) 
    { 
     if($this->contact_type == 2) 
     { 
      if($this->attribute == "") $this->addError($attribute, "Enter email address"); 
     } 
    } 
} 

但在那之后我要使用第二规则来检查,如果电子邮件格式是不错的,我怎么能实现呢?在主要规则我可以​​检查它:

['email', 'email', 'message' => 'wrong email format'], 

但我怎么能检查它只有当$ this-> contact_type == 2?我还需要编写自定义规则,我需要编写正则表达式来检查电子邮件格式?或者不知何故,我可以在自定义验证中使用主要验证规则?

谢谢。

回答

1

首先删除email验证者从rules()

使用相同的代码,在您的自定义验证中,您可以'附加'any existing Yii validatorcreate your own/custom validator。在你的情况下,Yii email validator就足够了,我们将它附加到你的定制验证中:

public function customEmailValidation($attribute, $params) 
{ 
    if(!$this->hasErrors()) 
    { 
     if($this->contact_type == 2) 
     { 
      if($this->attribute == "") 
      { 
       $this->addError($attribute, "Enter email address"); 
      } 
      if(strlen($this->attribute) > 0) 
      { 
       $emailValidator = new CEmailValidator; 
       if (! $emailValidator->validateValue($this->attribute)) 
       { 
        $this->addError($attribute, 'Wrong email'); 
       } 
      } 
     } 
    } 
}