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

时间:2011-12-19 05:22:47

标签: symfony json

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

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

在我的process.json.twig文件中

{% set res = { 'data': data } %}
{{ res | json_enconde | raw }}

其他形式

{{ { 'data': data } | json_enconde | raw }}

我也试过这个:

{{ 'hello' | json_encode | raw }}
Chrome中的

我得到了这个回复:

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

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

1 个答案:

答案 0 :(得分:5)

有两种方法可以实现这一点,具体取决于您的偏好以及您的操作是否应支持多种_format类型。

选项A - 仅返回JSON

的操作

您可以完全绕过模板。

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

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

通过呈现不同格式的动作,我引用具有路径的动作:

@Route("/check/{key}.{_format}", defaults={"_format"="json"}
@Template

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

假设控制器的processAction返回return array('data' => $process_data);问题,那么在名为process.json.twig的模板中将其呈现为JSON应该按照以下{{ data|json_encode }}进行,没有必要预处理data或将其转换为另一个数组或类似模板内的任何数组。