如何使用KnpSnappyBundle PDF和Symfony2加载CSS和图像?

时间:2015-09-11 00:00:11

标签: php symfony pdf

我在加载CSS和图像资源时收到Authentication Required错误。

错误示例:

Warning: Failed to load http://reporter.dev:8888/css/fc84af4_part_1_bootstrap-editable_2.css (ignore)

我正在使用KNP Snappy包,如下所示:

$html = $this->renderView(
  'InterlatedReporter:Allocation:casual_calendar_pdf.html.twig',
  array(
    'casualCalendar' => $casualCalendar,
  )
);

$filename = "export-casual-calendar-" . date("Ymd") . '.pdf';

return new Response(
  $this->get('knp_snappy.pdf')->getOutputFromHtml($html),
  200,
  array(
    'Content-Type' => 'application/pdf',
    'Content-Disposition' => 'attachment; filename="' . $filename . '"'
  )
);

树枝模板已添加绝对路径,如下所示。网址似乎使用file://

{{ app.request.getSchemeAndHttpHost() ~ asset('css/sortable-theme-bootstrap.css') }}

我尝试过使用安全性,开发防火墙已经到位:

dev:
    pattern:  ^/(_(profiler|wdt)|css|images|js)/
    security: false

这是第一条规则。

我们按照SensioFrameworkExtraBundle使用控制器注释。

我也尝试按照Symfony 2 kpn snappy generate pdf with output meets security area

传递会话

如何加载资源?

2 个答案:

答案 0 :(得分:6)

我找到了解决办法。 file://是关键。

传递模板的基目录:

$html = $this->renderView(
  'InterlatedReporter.html.twig',
  array(
    'casualCalendar' => $casualCalendar,
    'base_dir' => $this->get('kernel')->getRootDir() . '/../web' . $request->getBasePath()
  )
);

并提供资产的完整路径:

<link rel="stylesheet" href="{{ base_dir ~ asset('css/sortable-theme-bootstrap.css') }}">

答案 1 :(得分:0)

我有同样的问题,Interlated说,在asset('path/to/your/asset/or/image')解决问题之前添加一个基目录。

如果您无法访问$this->get('kernel')$request(例如在听众中),您可以手动执行此操作&#34; __DIR__魔法常数!

我的听众在./my-project/src/MyBundle/Listener/MyListener.php 和我的$basedir = __DIR__.'/../../../web'

所以在你的树枝视图中<img src="{{ basedir ~ asset('path/to/your/img')}}" alt="">