2016-11-14 21 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'); 
       } 
      } 
     } 
    } 
}