Zend验证有问题(Zend_Validate_Db_NoRecordExists)

时间:2011-07-02 15:58:28

标签: zend-framework zend-validate

我正在设置用户注册页面,并在用户名字段上进行验证,该字段首先检查用户是否已经存在,其次是用户名不是保留用户名。我的问题是当我将两个验证器附加到表单元素时,它忽略了第二个验证。第二次验证仅在第一次验证被删除时有效。这是一个错误吗?如果是这样,我该如何解决?

以下是验证人:

    $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)

2 个答案:

答案 0 :(得分:2)

使用两个相同类型的验证器时出现问题。您需要做的是添加验证器链:

$validatorChain = new Zend_Validate();
$validatorChain->addValidator($validator)                            
               ->addValidator($reserved_validator);

只需将链添加到元素中即可。

->addValidator($validatorChain);

答案 1 :(得分:0)

不,这不是一个错误,这是设计,我会说。您可以拥有多种类型的验证器,但每种验证器只有一种类型。如果允许连接表,则必须查看DB验证器。到目前为止,我从未使用过DB验证器。

更新刚刚注意到另一个答案,该链应该可以解决问题。