symfony的4上传

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

如何上传在symfony中4.I文件与symfony的文件来完成。我不知道我错过了一些东西。它会抛出错误,而上传文件给我一些线索

REFERED LINK:

https://symfony.com/doc/current/controller/upload_file.html

错误:

The file "" does not exist

实体

    public function getBrochure()
    {
        return $this->brochure;
    }

    public function setBrochure($brochure)
    {
        $this->brochure = $brochure;

        return $this;
    }

文件上传监听器

class FileUploader
{
    private $targetDirectory;

    public function __construct($targetDirectory)
    {
        $this->targetDirectory = $targetDirectory;
    }

    public function upload(UploadedFile $file)
    {
        $fileName = md5(uniqid()).'.'.$file->guessExtension();

        $file->move($this->getTargetDirectory(), $fileName);

        return $fileName;
    }

    public function getTargetDirectory()
    {
        return $this->targetDirectory;
    }
} 
file-upload doctrine symfony4
1个回答
1
投票

这Symfony的教程工作正常,我,所以我会尽力解释如何,或许它会帮助你还是人还在寻找一个答案,这个职位变得有点老了。

所以,首先你要更好的可重用性(章:创建上传服务)创建应用程序\服务的FileUploader服务。基本上你可以复制/粘贴什么,他们在这里已经做了,它就像一个魅力。然后,你需要在配置文件夹,并明确您的小册子目录打开你的services.yaml:

parameters:
    brochures_directory: '%kernel.project_dir%/public/uploads/brochures'
# ...
services:
    # ...

    App\Service\FileUploader:
        arguments:
            $targetDirectory: '%brochures_directory%'

现在一切都正常就可以使用您的FileUploader服务。所以,如果你在你的控制器(例如),我想你想的形式使用它。这样,你就必须做到这一点(不要忘记使用您的服务在您的控制器):

public function myController(FileUploader $fileUploader)
{
    // Create your form and handle it

    if ($form isValid() && &form isSubmitted()) {
        $file = $myEntity->getBrochure();
        $fileName = $this->fileUploader->upload($file);
        $myEntity->setBrochure($fileName);

        // Form validation and redirection
    }
    // Render your template
}

其中重要的一点我忘了说。在你的FormType,你需要说,这本小册子将是一个文件类型:

$builder->add('brochure', FileType::class)

但是,在你的实体,您必须指定您的小册子存储为“串”:

/**
 * @MongoDB\Field(type="string")
 */
 protected $brochure;

原因是你的文件被越来越上传并保存在公共/上传/小册子。但是,你的数据库只记住一个字符串路径去实现它。

我希望这个能帮上忙!

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