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,
),
),
));