У меня есть форма, которая позволяет пользователю редактировать свою информацию и загружать изображение. Загрузка изображения не является обязательной, но когда я отправляю форму, у меня всегда возникает ошибка, сообщающая, что изображение не было загружено.
Вот частичный код набора полей:
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());
}
}