Symfony VichUploaderBundle с автопроводкой на DownloadHandler в контроллере - PullRequest
0 голосов
/ 16 июня 2019

Я использую Symfony 4 с VichUploaderBundle 1.9, и мне трудно внедрить службу DownloadHandler в моем контроллере для отправки файла клиенту.

Я также использую HashidsBundle , чтобы преобразовать мой идентификатор сущности во что-то вроде jFaJ в моих URL.

Как указано в документации VichUploaderBundle , я внедряю службу в свой контроллер следующим образом:

    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 "- это меньший локатор службы, который знает только о" доктрине "," form.factory "," http_kernel "," parameter_bag "," request_stack "," router "," security.authorization_checker "," security.csrf.token_manager "," security.token_storage "," serializer "," session "и" twig "services.Попробуйте вместо этого использовать внедрение зависимостей.

1 Ответ

1 голос
/ 17 июня 2019

Вы можете вернуть файл, используя 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

...