Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ZF2文件验证程序返回所有消息,但只需要触发_Php_Validation_Zend Framework2_Extract Error Message - Fatal编程技术网

Php ZF2文件验证程序返回所有消息,但只需要触发

Php ZF2文件验证程序返回所有消息,但只需要触发,php,validation,zend-framework2,extract-error-message,Php,Validation,Zend Framework2,Extract Error Message,我只想获取已触发的消息,但我正在获取所有已注册的消息 $inputFilter = $factory->createInput(array( 'name' => 'image', 'required' => true, 'validators' => array( array( 'name' => '\Zend\Validator\File\

我只想获取已触发的消息,但我正在获取所有已注册的消息

$inputFilter = $factory->createInput(array(
        'name'       => 'image',
        'required'   => true,
        'validators' => array(
            array(
                'name'    => '\Zend\Validator\File\IsImage',
                'options' => ['message' => 'File has to be valid image.']
            ),
            array(
                'name'    => '\Zend\Validator\File\Extension',
                'options' => ['extension' => 'png,jpg,jpeg', 'message' => 'Image extension has to be png,jpg or jpeg.'],
            ),
            array(
                'name'    => '\Zend\Validator\File\Size',
                'options' => ['max' => '2MB', 'message' => 'Maximum file size for image is 2MB.'],
            ),
        ),
    ));
稍后在控制器中:

if(!$filter->isValid()){
    var_dump($filter->getMessages());
}
如果我尝试上传5MB大小的图像,我会收到所有消息:

array(
  'image' => array(
    'fileIsImageNotReadable' => 'File has to be valid image'
    'fileExtensionNotFound' => 'Image extension has to be png,jpg or jpeg'
    'fileSizeNotFound' => 'Maximum file size for image is 2MB'  
  )
);
但只期望“图像的最大文件大小为2MB”

有没有办法只返回触发的消息?
这应该是getMessages()方法的默认行为吗?

一个可能的解决方案是使用

在某些情况下,如果验证过程失败,让验证器中断链是有意义的
Zend\Validator\ValidatorChain
支持使用
attach()
方法的第二个参数的此类用例。通过将
$breakChainOnFailure
设置为
TRUE
,添加的验证程序将在失败时中断链的执行,从而避免运行被确定为不必要或不适合这种情况的任何其他验证

这样,验证会在第一次失败时停止,只有在验证失败时才会收到消息。您还可以设置优先级,以便按照特定顺序应用验证器。文档中给出的此示例使用方法
attach
。这不是你真正需要的

在您的情况下,您可以使用验证器规范中的
break\u chain\u on\u failure
键,将值设置为true。大概是这样的:

$inputFilter = $factory->createInput(array(
        'name'       => 'image',
        'required'   => true,
        'validators' => array(
            array(
                'name'    => '\Zend\Validator\File\IsImage',
                'options' => ['message' => 'File has to be valid image.']
                'break_chain_on_failure' => true,
            ),
        ),
));