如何在模板中使用不同格式的输出

3.4 版本
维护中的版本

模板是一个渲染任何格式内容的通用的方式。大多数情况下,我们使用模板来渲染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>

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)