0

我正在尝试使用 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在上传之前添加 's Id。像,$entity->getId() . $fileName(困惑:如果我要添加一个新实体怎么办。不会有 id)

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

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

显示旧名称。

4

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

于 2019-03-01T18:14:59.703 回答