Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对symfony2中的所有json响应使用1个模板_Json_Templates_Symfony - Fatal编程技术网

对symfony2中的所有json响应使用1个模板

对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

正如我所知,每个控制器都必须有自己的json响应模板,如何强制所有json响应使用相同的模板

简单来说,我的Cotronler/路由器如下所示:

_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。