symfony - Symfony VichUploaderBundle 在控制器中的 DownloadHandler 上自动装配
问题描述
我正在使用带有 VichUploaderBundle 1.9 的 Symfony 4,我很难DownloadHandler
在控制器中注入服务以便将文件发送到客户端。
我还使用HashidsBundle将我的实体 ID 转换为jFaJ
我的 URL 中的类似内容。
如VichUploaderBundle 文档中所述,我将服务注入到我的控制器中,如下所示:
public function download(Wallpaper $wallpaper, DownloadHandler $downloadHandler)
{
return $downloadHandler->downloadObject($wallpaper->getMedia(), 'uploadedFile');
}
这是我遇到的错误:
传递给 App\Controller\WallpapersController::download() 的参数 2 必须是 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”内的容器是一个较小的服务定位器,只知道“学说”、“form.factory”、“http_kernel” ”、“parameter_bag”、“request_stack”、“router”、“security.authorization_checker”、“security.csrf.token_manager”、“security.token_storage”、“serializer”、“session”和“twig”服务。尝试改用依赖注入。
解决方案
您可以使用 BinaryFileResponse 返回文件。
public function download(Wallpaper $wallpaper): BinaryFileResponse
{
$file = new BinaryFileResponse($wallpaper->getMedia());
return $file;
}
推荐阅读
- python - 拆分字符串时,如何跳过包含空格的字段?
- python - 将全连接层转换为 conv2d 并预测输出?
- ode - 将 Scilab 的 ode 输出保存到表中
- java - 使用 ThreadLocal 类在 AndroidDriver 中运行并行执行时“无法创建新会话”
- php - 替换“优惠券代码申请成功”。WooCommerce 中的消息
- jetty - Jetty 8 阻塞慢客户端的 IO
- integration - 使用 BullHorn API 连接 DellBoomi
- asp.net-core - 为什么我只能在控制器 Blazor / aspnet core 3 上调用一项操作?
- python - For 循环列表中列表的索引 - 索引超出范围
- flutter - Flutter Bloc 在收到事件之前发送状态