我正在将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”服务。尝试改用依赖项注入。
答案 0 :(得分:1)
您可以使用BinaryFileResponse返回文件。
public function download(Wallpaper $wallpaper): BinaryFileResponse
{
$file = new BinaryFileResponse($wallpaper->getMedia());
return $file;
}