我在Yii1.x (1.1.14)
中遇到了一个问题,但我还没有找到解决方案。
在我的表单中,我有两个文本字段,[文本字段A]和[文本字段B]。我想验证他们两个一起遵循以下规则:
- 如果A&;B为空,返回1条错误所需消息
例如:验证用户名和密码,其中一个不正确,为两者输出1条消息:您的用户名或密码不正确 - 如果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时,此验证器将抛出一个错误。