考虑表格的以下部分
$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, Ĵ
答案 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文档。