yii1具有特殊条件的验证规则

时间:2016-11-14 09:32:26

标签: php validation yii yii1.x

我在使用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 个答案:

答案 0 :(得分: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');
               }
            }
        }
    }
}