Как изменить имя изображения перед загрузкой в ​​Zend Framework 3 - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь загрузить изображение, используя класс формы Zend, и мой текущий фильтр ввода выглядит следующим образом:

$inputFilter->add([
        "name"                                           => "ImageLogo",
        "required"                                       => false,
        "validators"                                     => [
            [
                "name"                                   => "FileMimeType",
                "options"                                => [
                    "mimeType"                           => [ "image/jpeg", "image/png" ],
                ],
            ],
            [
                "name"                                   => "FileIsImage",
            ],
        ],
        "filters"                                        => [
            [
                "name"                                   => "FileRenameUpload",
                "options"                                => [
                    "target"                             => getcwd() . "/public/uploads/logos",
                    "useUploadName"                      => true,
                    "useUploadExtension"                 => true,
                    "overwrite"                          => true,
                    "randomize"                          => true,
                ],
            ],
        ],
    ]);

Он загружается отлично, но у меня есть некоторые части, которые я не смог изменить.

Во-первых, я бы хотел, чтобы перед загрузкой был добавлен идентификатор $entity.Что-то вроде $entity->getId() . $fileName (Путаница: что, если я добавляю новый объект. Идентификатора не будет)

Во-вторых, как мне получить имя файла в контроллере после проверки формы.Это

if ($form->isValid()) {
 print_r($form->getData());exit();
}

Показывает старое имя.

1 Ответ

0 голосов
/ 01 марта 2019

У меня есть похожее приложение.Вот как я это сделал, если это поможет.

  • Я не готовлюсь к загрузке, потому что, как вы упомянули, идентификатор объекта остается неопределенным до завершения создания.
  • Я загружаюсначала и получить имя изображения на сервере.
  • Я создаю запись в дБ с именем tmp_.

    // If form is submitted
    if ($this->getRequest()->isPost()) {
    
        // Merge form data and file data
        $data = array_merge_recursive(
            $this->getRequest()->getPost()->toArray(),
            $this->getRequest()->getFiles()->toArray()
        );
    
        // Filter and verify form data
        $form->setData($data);
    
        // If form is valid
        if ($form->isValid()) {
            $data = $form->getData();
            $fileNameOnServer = basename($data['ImageLogo']['tmp_name']);
    
            // entity repository manages saving into database and return new id
            $newEntityId = $this->_entityRepository->create($data);
    
            // Here we know the entity ID and the file name on server
        } else {
            // Do something if form is not valid
        }
    }
    
    // Do something if form is not submitted (e.g. display form)
    

Теперь у меня есть идентификатор объекта иимя файлаЯ не изменяю имя файла в БД (приложение удовлетворено случайным именем сервера), но отсюда вся информация доступна, если вам нужно.

...