1

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

以下是验证器:

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

2 回答 2

2

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

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

只需将链添加到元素。

->addValidator($validatorChain);
于 2011-07-02T17:49:10.287 回答
0

不,这不是错误,这是设计使然,我会说。您可以有多种类型的验证器,但每种只有一种。如果它允许加入表,您必须查看数据库验证器。到目前为止,我从未使用过数据库验证器。

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

于 2011-07-02T17:28:23.157 回答