Как сохранить PDF-файлы с помощью Sonata Media Bundle - PullRequest
0 голосов
/ 07 октября 2019

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

Я создал свой файл с помощью 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);

ok, теперь файл сохранен правильно, без ошибок. Теперь вопрос заключается в том, как управлять этим файлом с помощью 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)

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

1 Ответ

0 голосов
/ 09 октября 2019

Проблема заключалась в следующем: $ mediaManager (service 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' 

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

use Sonata\MediaBundle\Entity\MediaManager;

private $mediaManager;

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

$media = new Media(); 
$this->mediaManager->save($media);
...