Zend_Validate_Bet之间的奇怪错误消息

时间:2009-06-13 16:40:55

标签: php validation zend-framework

我正在尝试使用 Zend_Validate_Between 类。

我这样设置了:

$scoreBetweenValidator = new Zend_Validate_Between(-3, 3, true);

因此验证器应该只接受介于-3和3之间的值。

在无效值上,我在haystack 错误消息中找不到'%value%',我认为该消息属于 Zend_Validate_InArray 类(Zend_Validate_InArray :: NOT_IN_ARRAY)。

我的问题是我希望使用 setMessages 方法使用自定义错误消息,但我不知道如何为这个看似外来的消息密钥设置它。

我试过了:

$scoreBetweenValidator->setMessages(array(
        Zend_Validate_Between::NOT_BETWEEN_STRICT => 'my custom msg',
        Zend_Validate_Between::NOT_BETWEEN => 'my other custom msg',
            //'notInArray' => "doesn't work"
            //Zend_Validate_InArray::NOT_IN_ARRAY => "also doesn't work"
    ));

但我得到了没有关键字'notInArray'例外的消息模板。

在Zend Framework中设置自定义验证消息的首选解决方案是什么?

作为对Jason的回复:

Zend_Form_Element_Select 位于使用 addElements 方法附加的 Zend_Form 类中。

表单中没有任何其他元素,它没有任何其他验证器,只有Between。

默认情况下,select的选项都是有效的,但是当我调整选项值(使用Firebug)并设置无效值(作为自我黑客攻击)时,我会收到notInArray异常。

2 个答案:

答案 0 :(得分:9)

Zend_Form_Element_Select自动将InArray验证器添加到自身。

要为它设置错误消息,这应该可以解决问题:

$element->getValidator('InArray')->setMessage('Your inArray error message here', Zend_Validate_InArray::NOT_IN_ARRAY);

如果您根本不需要InArray验证器,则可以通过在元素上调用setRegisterInArrayValidator(false)或在元素创建时将false传递给registerInArrayValidator配置键来禁用此行为。

答案 1 :(得分:-1)

我是新手,所以我在Zend \ Validate \ EmailAddress.php中更改了消息。毕竟它的电子邮件