如何在zend框架3中上传之前修改图像名称

问题描述 投票:0回答:1

我正在尝试使用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的ID。像$entity->getId() . $fileName(混淆:如果我正在添加一个新实体,那将会有什么内容)

其次,在验证表单后如何在控制器中获取文件名。这个

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

显示旧名称。

file-upload zend-framework zend-form zend-framework3 zend-file
1个回答
0
投票

我有一个类似的应用程序。如果它有帮助,我就是这样做的。

  • 我没有在上传前预先添加因为正如你所提到的那样,实体ID在创建完成之前仍然不确定。
  • 我先上传并在服务器上获取图像名称。
  • 我使用tmp_name在db中创建记录。 // 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)

现在我有实体ID和文件名。我没有更改DB中的文件名(应用程序对服务器随机名称感到满意)但是从这里可以获得所有信息。

© www.soinside.com 2019 - 2024. All rights reserved.