Автоматическое подключение Symfony VichUploaderBundle к DownloadHandler в контроллере

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

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

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

    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" "," пакет_параметров "," стек_запроса "," маршрутизатор "," security.authorization_checker "," security.csrf.token_manager "," security.token_storage "," сериализатор "," сеанс "и" веточка ". Попробуйте вместо этого использовать инъекцию зависимостей.


person Artyum    schedule 16.06.2019    source источник


Ответы (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

person AythaNzt    schedule 17.06.2019
comment
Спасибо, но это всего лишь обходной путь. Проблема в том, что Symfony не может должным образом автоматически подключать службу DownloadHandler. В любом случае, я заметил, что проблема может исходить из HashidsBundle (о котором я забыл упомянуть при написании своего вопроса), и я открыл проблему в их репозитории GitHub. Один из специалистов по обслуживанию в настоящее время изучает это, и я опубликую там исправление, если оно будет. github.com/roukmoute/HashidsBundle/issues/8 - person Artyum; 18.06.2019
comment
Оказывается, это ошибка другой библиотеки, которую я использую (HashidsBundle). github.com/roukmoute/HashidsBundle/issues/8 - person Artyum; 26.07.2019