2016-11-14 6 views
0

Im проблема с Yii1 проверка. У меня есть список с типами контактов, и я хочу, чтобы проверка электронной почты работала только при выборе контакта по электронной почте. Таким образом, Im, используя пользовательские правила, чтобы проверить, если его не пуст: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? Мне также нужно написать собственное правило, и мне нужно написать regex для проверки формата электронной почты? Или каким-то образом я могу использовать основные правила валидации в пользовательских проверках?

спасибо.

ответ

1

Сначала удалите email валидатор с rules().

Используя тот же код, в вашей пользовательской проверке вы можете «прикрепить» any existing Yii validator или create 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'); 
       } 
      } 
     } 
    } 
}