对symfony2中的所有json响应使用1个模板
正如我所知,每个控制器都必须有自己的json响应模板,如何强制所有json响应使用相同的模板 简单来说,我的Cotronler/路由器如下所示:对symfony2中的所有json响应使用1个模板,json,templates,symfony,Json,Templates,Symfony,正如我所知,每个控制器都必须有自己的json响应模板,如何强制所有json响应使用相同的模板 简单来说,我的Cotronler/路由器如下所示: _myname: pattern: /xxx/yyy.{_format} defaults: { _controller: bundle:class:myname, _format:html } requirements:{ _format: html|json } /** * @Template() */ public f
_myname:
pattern: /xxx/yyy.{_format}
defaults: { _controller: bundle:class:myname, _format:html }
requirements:{ _format: html|json }
/**
* @Template()
*/
public function mynameAction(){
return array("data"=>array("error"=>1, "msg"=>"msg"))
}
/Symfony/app/Resources/views/base.json
{
"success": {% block success %}true{% endblock %},
"user": {% block user %}guest{% endblock %},
"items": {% block items %}[]{% endblock %}
}
好的,现在它工作得很好,当用户请求/xxx/yyy.html时,控制器将呈现视图“myname.html.twig”,当用户请求/xxx/yyy.json时,将显示视图“myname.json.twig”,但是,实际上每个json时间都是相同的,我如何让symfony2知道:
当用户请求/xxx/yyy.html时,按正常方式呈现“myname.html.twig”当用户请求/xxx/yyy.json时,呈现其他模板,如“default.json.twig”,而不是“myname.json.twig”
谢谢。如你所知,我们有小树枝。使用twig,我们可以扩展一些模板。您可以创建如下基本json文件:
_myname:
pattern: /xxx/yyy.{_format}
defaults: { _controller: bundle:class:myname, _format:html }
requirements:{ _format: html|json }
/**
* @Template()
*/
public function mynameAction(){
return array("data"=>array("error"=>1, "msg"=>"msg"))
}
/Symfony/app/Resources/views/base.json
{
"success": {% block success %}true{% endblock %},
"user": {% block user %}guest{% endblock %},
"items": {% block items %}[]{% endblock %}
}
在所有包中,您可以将任何模板定义为base.json的扩展
{% extends '::base.json' %}
{% block success %}{{ success }}{% endblock %}
{% block user %}app.user{% endblock %}
{% block items %}['one','two','three']{% endblock %}
您还可以创建一种工厂类。此类始终可以返回特定json结构中的json文件。您不能使用模板,只需在操作中返回“newresponse(json_encode(…)”。谢谢您的回答。但我必须为每个动作创建一个json细枝,即使它们可以从基本模板扩展?这就是我试图避免的,我希望操作只返回一个数组,然后框架呈现html或json模板取决于用户请求,我单独创建html模板,但希望所有json请求优雅地呈现为同一个模板,而无需重复工作。为什么要创建json细枝?Symfony2需要一个“响应”。如果需要,您还可以使用“返回新响应(json_encode(array('bla'=>'bla','或'=>123));”结束操作;如果我返回编码的json字符串而不是数组,html页面将无法工作。我需要一个动作呈现2个视图,1个是html页面,1个是json,取决于reuqest是/xxx.json还是/xxx.html。