2016-11-14 10 views
0

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"); 
     } 
    } 
} 

をしかし、その後、私は電子メールの形式が良いかどうかをチェックするために、第2のルールを使用したい、私はそれをどのように達成することができますか?主なルールでは、私はこれで確認できます:

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

$ this-> contact_type == 2のときだけチェックできますか?私もカスタムルールを書く必要があり、私は電子メール形式をチェックする正規表現を書く必要がありますか?または、何らかの形でカスタム検証でメインの検証ルールを使用できますか?

ありがとうございます。

答えて

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