2011-12-19 13 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 }} 

クローム

{{ '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

を解決カントこれを達成するための2つの方法があり、それはあなたが好むかどうかをどのに依存あなたの行動が複数のタイプの_formatをサポートするはずです。

オプションA - のみJSON

を返すアクションあなたは完全にテンプレートをバイパスすることができます。異なるフォーマットをサポートしているかが異なるだけレンダリングする作用によりテンプレート

にJSONをレンダリングしたいアクション - あなたのコントローラ

@Template注釈を削除し、代わりにreturn new Response(json_encode($process_data));

オプションBでは

形式私は、次のようなルートを持つアクションを参照します:

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

この質問のコントローラーは「a JSONのみをサポートしていますが、テンプレートでレンダリングしたいと思っています。 "質問はそれから{{ data|json_encode }}を次のようにprocess.json.twigが行われるべきであるというテンプレート内でJSONとしてこれをレンダリング尋ねると、dataプロセスを事前またはそのような別の配列か何かにそれを有効にする必要がない、コントローラのprocessAction戻りreturn array('data' => $process_data);を想定し

テンプレート内

+0

は本当に解決策ですがバグですか? – rkmax

+0

@rkmax:いいえ、私はバグだとは言いません。 symfonyがテンプレート作成段階を行う必要がないので、コントローラからの応答としてJSONデータを返すほうが効率的です。なぜテンプレートを呼び出さなかったのかは分かりませんが、 '_format =" json "'は 'application/json'としてコンテンツタイプを設定し、応答の中で適切なデータを期待する必要があることを知っているかもしれません。 – Kasheen

+0

とにかく私は疑いがあるので、彼らが私に何を教えているかを見るためにバグとして報告しました – rkmax

関連する問題