总是我得到一个空白,我在我的控制器中有这样的动作
/**
* @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
从服务器得到任何东西,我无法解决这个问题
答案 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
或将其转换为另一个数组或类似模板内的任何数组。