0

考虑表格的以下部分

    $name = new Zend_Form_Element_Text('name');
    $name->setLabel('name: ')
                             ->setRequired(true)
                             ->addValidator($empty)
                             ->addValidator($alpha)
             ->setDecorators($newdecorators);
    $this->addElement($name);

我将 $empty 和 $alpha 定义为:

        $empty = new Zend_Validate_NotEmpty();
        $empty->setMessage('some text',  Zend_Validate_NotEmpty::IS_EMPTY);

        $alpha = new Zend_Validate_Alpha();
        $alpha->setMessage('some text',Zend_Validate_Alpha::NOT_ALPHA);

现在我的问题:

使用此代码,当输入为空时,我会收到双重验证消息。首先是自定义消息,然后:'' 是一个空字符串当我删除 setRequired 时,空验证器不会运行。为什么是这样?我不想使用 setRequired,因为如果我为 setRequired 添加 errorMessage,$alpha 错误消息将被覆盖。

谢谢,J

4

1 回答 1

1

发生这种情况是因为默认行为是检查分配给元素的所有验证器,即使之前的验证之一失败。

幸运的是,很容易防止这种情况发生:在该addValidator方法中,您可以传递第二个参数$breakChainOnFailure,如果设置为 ,则在失败时停止进一步验证true

因此,在您给出的示例中,您只需将第二个参数设置为 true:

$name = new Zend_Form_Element_Text('name');
$name->setLabel('name: ')
                         ->setRequired(true)
                         ->addValidator($empty, true)
                         ->addValidator($alpha, true)
         ->setDecorators($newdecorators);
$this->addElement($name);

如果您输入空字符串,则只会显示一条错误消息。

有关更多信息,请参阅 Zend Framework 文档验证器链

于 2012-06-04T21:08:46.690 回答