【问题标题】:How to modify image name before uploading in zend framework 3如何在zend框架3中上传之前修改图像名称
【发布时间】:2019-02-27 11:46:08
【问题描述】:

我正在尝试使用 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 之类的东西(困惑:如果我要添加一个新实体怎么办。不会有 id)

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

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

显示旧名称。

【问题讨论】:

    标签: file-upload zend-framework zend-form zend-framework3 zend-file


    【解决方案1】:

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

    • 我不会在上传之前进行预先设置,因为正如您所提到的,实体 ID 在创建完成之前仍然不确定。
    • 我先上传并在服务器上获取图片名称。
    • 我在 db 中使用 tmp_name 创建记录。

      // 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 中的文件名(应用程序对服务器随机名称感到满意),但如果您需要,所有信息都可以从这里获得。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2010-11-19
      相关资源
      最近更新 更多