内容长度:在json响应Symfony2中为0

rkm*_*max 4 json symfony

总是我得到一个空白,我在我的控制器中有这样的动作

/**
 * @Route("/check/{key}.json", defaults={"_format"="json"})
 * @Template()
 */
public function processAction($upload_key)
{
  /* make thing */
  return array('data' => $process_data);
}
Run Code Online (Sandbox Code Playgroud)

在我的process.json.twig文件中

{% set res = { 'data': data } %}
{{ res | json_enconde | raw }}
Run Code Online (Sandbox Code Playgroud)

其他形式

{{ { 'data': data } | json_enconde | raw }}
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

{{ 'hello' | json_encode | raw }}
Run Code Online (Sandbox Code Playgroud)

在铬我得到这个回应:

Connection:close
Content-Length:0
Content-Type:application/json
Date:Mon, 19 Dec 2011 05:13:17 GMT
Server:Apache/2.2.20 (Ubuntu)
X-Powered-By:PHP/5.3.6-13ubuntu3.3
Run Code Online (Sandbox Code Playgroud)

从服务器得到任何东西,我无法解决这个问题

Kas*_*een 5

有两种方法可以实现这一点,这取决于您喜欢哪种方式以及您的操作是否应该支持多种_format类型.

选项A - 仅返回JSON的操作

您可以完全绕过模板.

在您的控制器中删除@Template注释,而不是return new Response(json_encode($process_data));

选项B - 支持不同格式的操作,或者您只希望在模板中呈现JSON

通过呈现不同格式的操作,我将引用具有路径的操作,如下所示:

@Route("/check/{key}.{_format}", defaults={"_format"="json"}
@Template
Run Code Online (Sandbox Code Playgroud)

虽然这个问题中的控制器沿着"只支持JSON但你想在模板中呈现它的动作"的路线走下去.

假设控制器processAction返回return array('data' => $process_data);问题,然后在调用的模板中将其作为JSON呈现,process.json.twig应按如下方式进行{{ data|json_encode }},不需要预处理data或将其转换为另一个数组或类似模板内的任何数组.