2011-12-19 3 views
4

항상 내가 빈을 얻을, 나는 내가내용 길이 : 0 JSON 응답 Symfony2

{% set res = { 'data': data } %} 
{{ res | json_enconde | raw }} 
을 내 process.json.twig 파일이

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

같은 내 컨트롤러의 동작을

다른 형태의

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

나도 이것을 시도했습니다

,536,크롬
{{ 'hello' | json_encode | raw }} 

내가이 응답을 얻을 :

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 

을 서버에서 아무것도 얻을, 나는

답변

5

이를 달성하는 방법은 두 가지가 있습니다, 그것은 의존이있는 당신이 선호 여부를 해결하지 못할 또는 귀하의 조치가 복수 _format 유형을 지원해야합니다.

옵션 A - 단지 JSON

당신은 완전히 템플릿을 무시할 수 반환하는 작업입니다. 컨트롤러에서

@Template 주석을 제거하고 대신 return new Response(json_encode($process_data));

옵션 B를 - 다른 형식을 지원하는 조치를 또는 당신은 다른 렌더링 작용에 의해 템플릿

에서 JSON을 렌더링 할 형식은 나는 그래서 경로로 작업을 참조하십시오

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

이 질문에 컨트롤러 "는 a의 경로를 아래로 이동하지만 JSON 만 지원하지만 템플릿에서 렌더링하려고합니다. " {{ data|json_encode }}를 다음과 같이 질문 한 후 process.json.twig라는 템플릿 내에서 JSON으로이 렌더링하는 수행해야 묻습니다으로 컨트롤러의 processAction 반환 return array('data' => $process_data); 가정

는-전 과정 data 또는 같은 다른 배열 또는 아무것도으로 바꿀 필요가 없습니다 템플릿 안쪽.

+0

이 솔루션 작업에는 사실이지만 버그입니까? – rkmax

+0

@rkmax : 아니, 나는 그것이 버그라고 말하지 않을 것이다. Symfony가 템플릿 단계를 수행 할 필요가 없으므로 어쨌든 JSON 데이터를 컨트롤러의 응답으로 반환하는 것이 더 효율적입니다. 왜 템플릿을 호출하지 않았는지 모르겠지만'_format = "json"'은 단지 content type을'application/json'으로 설정하고 응답에 적절한 데이터를 기대해야한다는 것을 알고있을 것입니다. – Kasheen

+0

어쨌든 제가 의심스러워 할 때, 그들이 저에게 무엇을 말해 주는지 알기 위해 버그로보고했습니다. – rkmax