Изучаю Symfony 4, делая блог и галерею.
У галереи имеется своя папка для загрузки картинок, указываю ее в параметрах:
parameters:
upload_directory: '%kernel.project_dir%/public/up'
gallery_upload: '%upload_directory%/gallery'
documents_upload: '%upload_directory%/docs'
files_upload: '%upload_directory%/files'
При загрузке картинки сохраняю ее в контроллере с помощью простого сервиса FileUploader - он сохраняет картинку по пути, который передаю параметром.
$uploadedFile = $request->files->get('image')['fileUploader'];
$fileName = $fileUploader->upload($uploadedFile, $this->getParameter('gallery_upload'));
$image->setImage($fileName);
Тут я сделал передачу пути через параметр, а не через конструктор, чтобы использовать единственный сервис FileUploader для всех загрузок - куда сохранять фаил, указываем передачей параметра. Правильно ли это, или для загрузки каждого типа фаила (документ/счет, архив, картинка) нужен свой загрузчик? Фактически логика загрузчика одна - переименовать полученный фаил и сохранить его по указанному пути. Это первый вопрос.
Второй связан с выводом картинки (и других типов фаилов) в шаблонизаторе Twig. На примере галереи я получаю в шаблоне объект изображения и имя фаила:
<img src="/up/gallery/{{ image.filename }}">
Но как правильнее передать путь к фаилу при его выводе? Добавлять дополнительные параметры в массив `parameters:`, типа:
parameters:
gallery_web: '/gallery/'
documents_web: '/docs/'
files_web: '/files/'
Как я понимаю, в этом случае нужно написать Twig расширение, которое будет запрашивать нужный параметр, типа:
<img src="{{ getParameter('gallery_web') }}{{ image.filename }}">
... или есть более красивый вариант?
Заранее спасибо за помощь!