ZF2 - разрешить пустой входной файл при отправке - PullRequest
0 голосов
/ 30 октября 2018

У меня есть форма, которая позволяет пользователю редактировать свою информацию и загружать изображение. Загрузка изображения не является обязательной, но когда я отправляю форму, у меня всегда возникает ошибка, сообщающая, что изображение не было загружено.

Вот частичный код набора полей:

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, когда я отправляю форму и отлаживаю значение, у меня все равно есть сбой проверки и это как мое значение отладки:

'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());
        }
    }
...