zend验证消息

时间:2012-06-04 13:02:27

标签: zend-form

考虑表格的以下部分

    $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错误消息。

THX, Ĵ

1 个答案:

答案 0 :(得分: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);

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

有关详细信息,请参阅Validator Chains上的Zend Framework文档。