2016-11-14 3 views
0

Ich habe Probleme mit der Yii1-Validierung. Ich habe eine Liste mit Kontakttypen und möchte, dass die E-Mail-Validierung nur funktioniert, wenn der Kontakt per E-Mail gewählt wird. So benutzerdefinierte Regel Im mit, wenn sie nicht leer zu überprüfen:yii1 Validierungsregel mit speziellen Bedingungen

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

Aber danach will ich zweite Regel verwenden, um zu überprüfen, ob E-Mail-Format ist gut, wie kann ich es erreichen? In Haupt-Regeln kann ich es überprüfen, indem Sie diese:

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

aber wie kann ich es nur überprüfen, wenn $ this-> contact_type == 2? Ich muss auch benutzerdefinierte Regel schreiben und ich muss Regex schreiben, um E-Mail-Format zu überprüfen? Oder irgendwie kann ich Hauptvalidierungsregeln in den kundenspezifischen Validierungen benutzen?

Vielen Dank.

Antwort

1

Zuerst entfernen Sie email Validator von rules().

Mit demselben Code können Sie in Ihrer benutzerdefinierten Validierung "attach" any existing Yii validator oder create your own/custom validator. In Ihrem Fall ist Yii email validator genug und wir werden es an Ihre benutzerdefinierte Validierung anschließen:

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'); 
       } 
      } 
     } 
    } 
} 
Verwandte Themen