如何在模板中使用不同格式的输出
模板是一个渲染任何格式内容的通用的方式。大多数情况下,我们使用模板来渲染HTML内容。模板同样也能渲染想javascript,CSS,XML以及你能想象到的其他格式内容。
比如,同一个资源resource经常被渲染为不同的格式。把文章目录页渲染为XML,你需要在模板的名称中包含相应的格式即可。
XML 模板名:
Article/index.xml.twig
XML 模板文件名:
index.xml.twig
事实上,这里只是命名上有了变化,而模板并没有真正的基于不同的格式渲染不同。
在大多数情况下,你可能想让单一的控制器根据请求的格式不同渲染多个不同的格式。下面是一个通常的写法:
1 2 3 4 5 6 |
public function indexAction(Request $request)
{
$format = $request->getRequestFormat();
return $this->render('article/index.'.$format.'.twig');
} |
Request
对象的getRequestFormat()
方法默认返回值为html
, request的格式通常是在路由时决定的。比如/contact
设置的请求格式是html,而 /contact.xml
设置的请求格式则是 XML
。想了解更多请查看 高级的路由样例。
创建一个包含请求格式的链接,只需要在参数哈希表中包含 _format
键值即可。
1 2 3 |
<a href="{{ path('article_show', {'id': 123, '_format': 'pdf'}) }}">
PDF Version
</a> |
1 2 3 4 5 6 |
<a href="<?php echo $view['router']->path('article_show', array(
'id' => 123,
'_format' => 'pdf',
)) ?>">
PDF Version
</a> |