Как сохранить PDF-файлы с помощью Sonata Media Bundle

Я попытался сохранить свои pdf-файлы в файловую систему медиа-пакета сонаты и вставить правильную запись в базу данных.

Я создал свой файл с dompdf следующим образом:

$dompdf = new Dompdf($pdfOptions);
$html = $this->renderView("pdf/hrprotokoll.html.twig", [
      'result' => $result,
      'vals' => $vals,
      'title' => 'Prüfprotokoll',
      'item' => $item,
      ]);

$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$output = $dompdf->output();
$publicDirectory = $request->server->get('DOCUMENT_ROOT') . '/uploads/hrprotokolle/'.$this->getUser()->getStandort()->getId();
$pdfFilepath =  $publicDirectory . '/'. time().'.pdf';
$file = time().'.pdf';
file_put_contents($pdfFilepath, $output);

хорошо, теперь файл сохраняется корректно без ошибок. Теперь вопрос в том, как управлять этим файлом с помощью Sonata MediaBundle. Я пробовал следующее:

$mediaManager = new MediaManager();
$media = new Media();
$media->setBinaryContent($file);
$media->setContext('default');
$media->setProviderName('sonata.media.provider.file');
$mediaManager->save($media);

Ошибка:

Too few arguments to function Sonata\Doctrine\Model\BaseManager::__construct(), 0 passed... ($mediaManager)

Я не могу установить правильный путь. У кого-нибудь есть идея решить эту проблему? Спасибо


person Daniel Richter    schedule 07.10.2019    source источник
comment
что вы подразумеваете под управлением pdf?   -  person MoxGeek    schedule 07.10.2019
comment
PDF-файл. Конечно, в противном случае это может быть и другой файл.   -  person Daniel Richter    schedule 07.10.2019


Ответы (1)


Проблема заключалась в следующем: $mediaManager (сервис sonata.media.manager.media) не может автоматически подключиться, поэтому вам придется делать это вручную.

сначала проверьте эту услугу в своем терминале и найдите информацию об этой услуге, набрав следующее:

 php bin/console debug:container sonata.media.manager.media

Результат:

Service ID       sonata.media.manager.media
Class            Sonata\MediaBundle\Entity\MediaManager

Хорошо, теперь перейдите в свой services.yaml и создайте псевдоним:

Sonata\MediaBundle\Entity\MediaManager: '@sonata.media.manager.media' 

Это сделано. Теперь вы можете внедрить MediaManager, и у меня это работает:

use Sonata\MediaBundle\Entity\MediaManager;

private $mediaManager;

public function __construct(MediaManager $mediaManager)
{
    $this->mediaManager = $mediaManager;
}

$media = new Media(); 
$this->mediaManager->save($media);
person Daniel Richter    schedule 09.10.2019