0

私が知っているように、各コントローラーにはjson応答用のテンプレートが必要ですが、すべてのjson応答に同じテンプレートを使用させるにはどうすればよいですか?

簡単に言えば、私の cotronller/router は次のようになります。

_myname:
    pattern: /xxx/yyy.{_format}
    defaults: { _controller: bundle:class:myname, _format:html }
    requirements:{ _format: html|json }


/**
* @Template()
*/
public function mynameAction(){
    return array("data"=>array("error"=>1, "msg"=>"msg"))
}

ユーザーが /xxx/yyy.html をリクエストすると、コントローラーはビュー "myname.html.twig" をレンダリングします。ユーザーが /xxx/yyy.json をリクエストすると、ビュー "myname.json.twig" が表示されます。 、しかし、実際にはすべてのjsonテンプレートは同じですが、symfony2にそれを知らせるにはどうすればよいですか:

ユーザーが /xxx/yyy.html をリクエストしたとき、"myname.html.twig" を通常
どおりにレンダリングします。 ?? _

ありがとう。

4

1 に答える 1

1

ご存知のように、Twig があります。twig を使用すると、いくつかのテンプレートを拡張できます。次のようなベース json ファイルを作成できます。

/Symfony/app/Resources/views/base.json
{
    "success": {% block success %}true{% endblock %},
    "user": {% block user %}guest{% endblock %},
    "items": {% block items %}[]{% endblock %}
}

そして、すべてのバンドルで、任意のテンプレートを base.json の拡張として定義できます

{% extends '::base.json' %}

{% block success %}{{ success }}{% endblock %}
{% block user %}app.user{% endblock %}
{% block items %}['one','two','three']{% endblock %}

一種のファクトリ クラスを作成することもできます。このクラスは、特定の json 構造で常に json ファイルを返すことができます。また、テンプレートを使用できず、アクションで「new Response(json_encode(...))」を返すだけです。

于 2012-07-13T05:04:33.817 に答える