Php 为什么可以';是否覆盖默认验证错误消息?

Php 为什么可以';是否覆盖默认验证错误消息?,php,zend-framework,validation,Php,Zend Framework,Validation,我使用验证一些表单输入(Zend Framework版本为1.8.2)。由于某些原因,使用所述接口不起作用: $data = $_POST; $filters = array('*' => array('StringTrim')); $validators = array('driverName' => array('NotEmpty','messages' => 'This should override the default message but does not!')

我使用验证一些表单输入(Zend Framework版本为1.8.2)。由于某些原因,使用所述接口不起作用:

$data = $_POST;
$filters = array('*' => array('StringTrim'));
$validators = array('driverName' => array('NotEmpty','messages' => 'This should override the default message but does not!'));
$inputFilter = new Zend_Filter_Input($filters,$validators,$data);
$messages = $inputFilter->getMessages();
debug($messages); //show me the variable contents
调试($messages)的输出:

无论我做什么,我都不能忽略这个信息。如果我直接使用验证器,即:

$notEmpty = new Zend_Validate_NotEmpty();      
$notEmpty->setMessage('This WILL override the default validation error message');
if (!$notEmpty->isValid($_POST['driverName'])) {
    $messages = $notEmpty->getMessages();
    debug($messages);
}
调试($messages)的输出:

底线。我可以让验证器工作,但如果没有
Zend\u Filter\u Input
验证接口方法的好处,我还不如编写自己的验证类

有人知道为什么会发生这种情况,以及如何解决它吗


可能是虫子吗

验证程序数组中的
消息
键必须传递一个键/值对数组,其中键是验证消息常量,值是自定义错误消息。下面是一个例子:

    $validators = array(

        'excerpt' => array(
            'allowEmpty' => true,
            array('StringLength', 0, Ctrl::getOption('blog/excerpt/length')), 
            'messages' => array(Zend_Validate_StringLength::TOO_LONG => 'The post excerpt must not exceed '.Ctrl::getOption('blog/excerpt/length').' characters.')
        ),

    );
但是,在您的情况下,您收到的错误消息来自Zend_Filter_输入的
allowEmpty
meta命令。这不是一个真正的标准验证器。您可以这样设置:

$options = array(
    'notEmptyMessage' => "A non-empty value is required for field '%field%'"
);

$input = new Zend_Filter_Input($filters, $validators, $data, $options);

// alternative method:

$input = new Zend_Filter_Input($filters, $validators, $data);
$input->setOptions($options);
如果每个字段需要不同的非空消息,我建议设置
allowEmpty=>true
并添加带有自定义消息的
NotEmpty
验证器


请参考,
NotEmpty
验证器的正确消息键为
Zend\u Validate\u NotEmpty::is\u EMPTY

MESSAGES参数采用数组,而不是字符串。试试这个:

$validators = array('driverName' => 
                     array('NotEmpty',
                           'messages' => array(
                                0 => 'This should override the default message but does not!'
                            )
                     )
              );

这是一个bug,它存在于Zend框架的JIRA中…

@Steve-我已经尝试过了,手册会让你相信它是有效的,而事实上它没有,但感谢你给出了答案:)@Karim-太糟糕了-它过去在ZF 1.0中以这种方式工作,并且在消息覆盖数组中接受验证常量作为键。我喜欢ZF提供基于索引的快捷方式,但我想他们真的想让一切都显式化/基于约定。@Jason-感谢您提供的详细信息和正确答案。$options参数解决了这个问题。太好了,再次感谢:)
$options = array(
    'notEmptyMessage' => "A non-empty value is required for field '%field%'"
);

$input = new Zend_Filter_Input($filters, $validators, $data, $options);

// alternative method:

$input = new Zend_Filter_Input($filters, $validators, $data);
$input->setOptions($options);
$validators = array('driverName' => 
                     array('NotEmpty',
                           'messages' => array(
                                0 => 'This should override the default message but does not!'
                            )
                     )
              );