Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用Sonata Media Bundle保存pdf文件_Php_Symfony_Symfony4_Sonata Media Bundle - Fatal编程技术网

Php 如何使用Sonata Media Bundle保存pdf文件

Php 如何使用Sonata Media Bundle保存pdf文件,php,symfony,symfony4,sonata-media-bundle,Php,Symfony,Symfony4,Sonata Media Bundle,我试图将我的pdf文件保存到sonata media bundle的文件系统中,并插入正确的数据库条目 我使用dompdf创建了我的文件,如下所示: $dompdf = new Dompdf($pdfOptions); $html = $this->renderView("pdf/hrprotokoll.html.twig", [ 'result' => $result, 'vals' => $vals, 'title' => 'Prü

我试图将我的pdf文件保存到sonata media bundle的文件系统中,并插入正确的数据库条目

我使用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);
$mediaManager = new MediaManager();
$media = new Media();
$media->setBinaryContent($file);
$media->setContext('default');
$media->setProviderName('sonata.media.provider.file');
$mediaManager->save($media);
 php bin/console debug:container sonata.media.manager.media
好的,现在文件已正确保存,没有错误。现在的问题是如何使用Sonata MediaBundle管理此文件。 我尝试了以下方法:

$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);
$mediaManager = new MediaManager();
$media = new Media();
$media->setBinaryContent($file);
$media->setContext('default');
$media->setProviderName('sonata.media.provider.file');
$mediaManager->save($media);
 php bin/console debug:container sonata.media.manager.media
错误:

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

我无法设置正确的方式。有人有办法解决这个问题吗?Thx

问题是:$mediaManager(service sonata.media.manager.media)无法自动连线,因此您必须手动执行此操作

首先,在您的终端中检查此服务,并通过键入以下内容查找有关此服务的信息:

$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);
$mediaManager = new MediaManager();
$media = new Media();
$media->setBinaryContent($file);
$media->setContext('default');
$media->setProviderName('sonata.media.provider.file');
$mediaManager->save($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);

管理pdf是什么意思?pdf文件。当然,以其他方式,它也可以是另一个文件