如何在Yii1.x中同时验证这两个属性


How to validate both attribute together in Yii 1.x

我在Yii1.x (1.1.14)中遇到了一个问题,但我还没有找到解决方案。

在我的表单中,我有两个文本字段,[文本字段A]和[文本字段B]。我想验证他们两个一起遵循以下规则:

  1. 如果A&B为空,返回1条错误所需消息
    例如:验证用户名和密码,其中一个不正确,为两者输出1条消息:您的用户名或密码不正确
  2. 如果A||B可用,则验证可用属性的数值。这也意味着,如果两者都可用,则验证两者的数值

我尝试过使用自定义验证,但它验证了每个属性。因此,我无法同时验证它们。

有人知道这个问题的解决方案吗

您可以编写自己的验证器。只需在您的模型中添加一种方法:

/**
 * @return array validation rules for model attributes.
 */
public function rules()
{
    return  array(
        'A',
        'requiredIf',
        'isSet' => 'B'
   );
/**
 * Validator-Rule
 * @param string $attribute 
 * @param array $params 
 */
public function requiredIf($attribute, $params){
    //validate
    $isSet = $params['isSet'];
    if(! empty($isSet)) {
        $attr = $this->{$isSet};
        $other = $this->{$attribute};
        if(! empty($attr) && empty($other)) {
            $this->addError($attribute, 'Error Text');
        }
    }
}

当设置了B,但没有设置a时,此验证器将抛出一个错误。