php - 如何使用 Sonata Media Bundle 保存 pdf 文件
问题描述
我试图将我的 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)
我无法设置正确的方式。有人有解决这个问题的想法吗?谢谢
解决方案
问题是:$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'
完成。现在您可以注入 MediaManager,它对我有用:
use Sonata\MediaBundle\Entity\MediaManager;
private $mediaManager;
public function __construct(MediaManager $mediaManager)
{
$this->mediaManager = $mediaManager;
}
$media = new Media();
$this->mediaManager->save($media);
推荐阅读
- swift - 无法转换“结果”类型的值' 关闭结果类型 'Result
' - ruby-on-rails - 在rails的数据库中保存表单数据(文本字段)
- perl - 使用perl读取电子表格中的时间格式数据
- java - 如何发送数组列表
到片段适配器 - javascript - ? 前面的令牌是不可量化的
- mysql - FORMAT 函数不适用于列中的所有数字?
- android - 防止在 Airwatch 托管设备上进行 android 应用逆向工程
- php - 如何仅显示未应用的类别?
- google-apps-script - 谷歌表格 - 如何从这个网站获取货币信息
- python - 在 bash 脚本中激活 python 虚拟环境失败并显示“sudo: source: command not found”