Symfony VichUploaderBundle在控制器中的DownloadHandler上自动装配

时间:2019-06-16 18:17:44

标签: symfony vichuploaderbundle hashids

我正在将Symfony 4与VichUploaderBundle 1.9一起使用,并且很难将DownloadHandler服务注入到控制器中以便将文件发送到客户端。

我还使用HashidsBundle以便将我的实体ID转换为URL中的jFaJ之类的东西。

VichUploaderBundle documentation中所述,我将服务注入到我的控制器中,如下所示:

    public function download(Wallpaper $wallpaper, DownloadHandler $downloadHandler)
    {
        return $downloadHandler->downloadObject($wallpaper->getMedia(), 'uploadedFile');
    }

这是我遇到的错误:

  

参数2传递给App \ Controller \ WallpapersController :: download()   必须是Vich \ UploaderBundle \ Handler \ DownloadHandler的实例,   给定的整数,称为   /mnt/c/Users/user/Documents/Dev/symfony/vendor/symfony/http-kernel/HttpKernel.php   在第151行

我还尝试通过在控制器中添加以下行来手动调用服务: $this->get('vich_uploader.download_handler');

但是它仍然无法正常工作,现在出现此错误:

  

未找到服务“ vich_uploader.download_handler”:即使它存在于应用程序的容器中,“ App \ Controller \ WallpapersController”内部的容器还是一个较小的服务定位器,仅知道“ doctrine”,“ form.factory” ,“ http_kernel”,“ parameter_bag”,“ request_stack”,“ router”,“ security.authorization_checker”,“ security.csrf.token_manager”,“ security.token_storage”,“ serializer”,“ session”和“ twig”服务。尝试改用依赖项注入。

1 个答案:

答案 0 :(得分:1)

您可以使用BinaryFileResponse返回文件。

    public function download(Wallpaper $wallpaper): BinaryFileResponse
    {
        $file = new BinaryFileResponse($wallpaper->getMedia());
        return $file;
    }

有关更多信息,请检查 https://github.com/aythanztdev/prbtcnccd/blob/master/src/Controller/MediaObject/ShowMediaObjectAction.php