"> "> " />

コンテンツの長さ:jsonの応答では0 Symfony2

常に私は空白を取得、私はこのような私のコントローラでアクションを持っている

/**
 * @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 }}

クロムで私はこの応答を得る:

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

サーバーから何も得られない場合、私はこれを解決できません

4

1 答え

これを達成するには2つの方法があります。どれが好きで、アクションが複数の _format タイプをサポートするかどうかによって異なります。

オプションA - JSONのみを返すアクション

テンプレートを完全にバイパスすることができます。

In your controller remove the @Template annotation and instead return new Response(json_encode($process_data));

オプションB - 異なるフォーマットをサポートするアクション、またはJSONをテンプレートにレンダリングしたいアクション

さまざまなフォーマットをレンダリングするアクションによって、私はルートを持つアクションを次のように参照します:

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

この質問のコントローラーは、「JSONだけをサポートしていますが、テンプレートでレンダリングしたいアクション」のルートになります。

Assuming the controller's processAction returns return array('data' => $process_data); as the question asks then rendering this as JSON inside a template called process.json.twig should be done as follows {{ data|json_encode }}, there is no need to pre-process data or turn it into another array or anything like that inside the template.

5
追加された
ソリューションの仕事は本当ですが、バグですか?
追加された 著者 rkmax,
とにかく私は疑いがあるので、私は彼らが私に何を言っているかを見るためにバグとして報告した
追加された 著者 rkmax,
実際には最初はそうだったので、Symfonyで働いている1.xともっと似ています
追加された 著者 rkmax,
はい {{data | json_encode}} はうまくいきます!ありがとう
追加された 著者 rkmax,
Excelente!私は最後にこれを完了します
追加された 著者 rkmax,
@rkmax:いいえ、私はバグだとは言いません。 symfonyがテンプレート作成段階を行う必要がないので、コントローラからの応答としてJSONデータを返すほうが効率的です。どうしてテンプレートが呼び出されなかったのか分かりませんが、 _format = "json" のときに application/json レスポンスには適切なデータが必要です。
追加された 著者 Kasheen,
@rkmax:私はTWIGとjson_encodeに関するもう少し研究をしましたが、 {{data | json_encode}} を行うことができるかもしれないと思います。コード>も同様です。あなたの上記のテンプレートコードでは、コントローラーから来る data でいくつかの前処理を行っていたので、おそらくそれが問題です。ルートの一部として {_ format} がある場合はテンプレートを使用することが理にかなっています( @Route( "/ check/{key}。{_ format}"、defaults = _format "=" json "}))を使用することもできます。
追加された 著者 Kasheen,
@rkmax:すみません、何かが翻訳の最後にあると思います。 {{data | json_encode}} もうまくいきましたか?
追加された 著者 Kasheen,
クール、私は見た目の他の人のためにそれを答えに加えます。
追加された 著者 Kasheen,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript