ZF2-允许提交一个空的输入文件

时间:2018-10-30 13:26:04

标签: zend-framework2 zend-form zend-validate

我有一个表格,允许用户编辑他的信息并上传图像。图像上传是可选的,但是当我提交表单时,总是出现一个错误,告诉我图像尚未上传。

这是部分字段集代码:

public function init() {
    $this->add([
        'name' => 'avatar',
        'type' => 'file',
        'attributes' => [
            'id' => 'avatar',
            'class' => 'input-file',
            'accept' => 'image/*'
        ],
        'options' => [
            'label' => 'avatar',
        ]
    ]);
}

此字段集实现InputFilterProviderInterface,因此代码如下:

public function getInputFilterSpecification() {
    return [
        'avatar' => [
            'type' => '\Zend\InputFilter\FileInput',
            'allow_empty' => true,
            'required' => false,
            'validators' => [
                [
                    'name' => 'FileExtension',
                    'options' => [
                        'extension' => ['jpg, jpeg, png'],
                        'message' => 'wrong_type_file'
                    ]
                ],
                [
                    'name' => 'FileSize',
                    'options' => [
                        'max' => '2MB',
                        'message' => 'file_too_large'
                    ]
                ]
            ],
        ],
    ];
}

尽管不需要此字段,并且allow_empty选项是true,但是当我提交表单并调试值时,我仍然有失败的验证,这是我的调试值:< / p>

'avatar' => 
    array (size=5)
      'name' => string '' (length=0)
      'type' => string '' (length=0)
      'tmp_name' => string '' (length=0)
      'error' => int 4
      'size' => int 0

您知道没有文件下载时如何验证表单事件吗?

提前感谢您的回答!

编辑1:这是表单提交后返回的消息:

'avatar' => 
     array (size=2)
         'fileExtensionNotFound' => string 'Extension d'image non admise (.jpg, .jpeg, .png seulement)'
         'fileSizeNotFound' => string 'Le fichier est trop volumineux, 2097152 maximum.' (length=48)

编辑2:控制器中的动作:

$prg = $this->fileprg($form);
    if ($prg instanceof Response) {
        return $prg;
    } elseif (is_array($prg)) {
        $data = $form->getData();
        if ($form->isValid()) {
            if ($data['person']['file']) {
                // @TODO upload file
            }
            if (!$this->personMapper->updatePerson($data)) {
                $this->flashMessenger()->addErrorMessage($this->translator()->translate('error_occurs_backup'));
            } else {
                $this->flashMessenger()->addSuccessMessage($this->translator()->translate('data_saved'));
            }
        } else {
            // @TODO file error management
            \var_dump('not valid');
            \var_dump($form->getMessages());
        }
    }

0 个答案:

没有答案