在Zend Framework 3中上传之前如何修改图像名称

时间:2019-02-27 11:46:08

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

我正在尝试使用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();
}

显示旧名称。

1 个答案:

答案 0 :(得分: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和文件名。我不更改数据库中的文件名(该应用程序对服务器的随机名称感到满意),但是如果需要,从这里可以获取所有信息。