我正在设置用户注册页面,并在用户名字段上进行验证,该字段首先检查用户是否已经存在,其次是用户名不是保留用户名。我的问题是当我将两个验证器附加到表单元素时,它忽略了第二个验证。第二次验证仅在第一次验证被删除时有效。这是一个错误吗?如果是这样,我该如何解决?
以下是验证人:
$validator = new Zend_Validate_Db_NoRecordExists(
array(
'table' => 'users',
'field' => 'username'
)
);
$validator->setMessage('Username %value% already exists', Zend_Validate_Db_Abstract::ERROR_RECORD_FOUND);
$reserved_validator = new Zend_Validate_Db_NoRecordExists(
array(
'table' => 'reserved_users',
'field' => 'name'
)
);
$reserved_validator->setMessage('Username %value% is not available', Zend_Validate_Db_Abstract::ERROR_RECORD_FOUND);
然后在我的元素上:
->addValidator($validator)
->addValidator($reserved_validator)
答案 0 :(得分:2)
使用两个相同类型的验证器时出现问题。您需要做的是添加验证器链:
$validatorChain = new Zend_Validate();
$validatorChain->addValidator($validator)
->addValidator($reserved_validator);
只需将链添加到元素中即可。
->addValidator($validatorChain);
答案 1 :(得分:0)
不,这不是一个错误,这是设计,我会说。您可以拥有多种类型的验证器,但每种验证器只有一种类型。如果允许连接表,则必须查看DB验证器。到目前为止,我从未使用过DB验证器。
更新刚刚注意到另一个答案,该链应该可以解决问题。