レイアウトを拡張する小枝テンプレートを備えたSf2アプリケーションがあります。render
テンプレート内で、小枝のタグを使用してブロックを埋めたいと思います。残念ながら、render
タグは予想される単一のサブリクエストではなく、2つのサブリクエストを引き起こします。しかし、render
タグをブロックの外側に配置すると、すべてが正常に機能します*。
*もちろん、結果がブロック内ではなくページの上部に表示されることを除いて、追加のサブリクエストは1つだけです。
render
タグがブロック内に配置されている場合にのみ、2つのサブリクエストが行われる原因は何ですか?
汚い詳細
レイアウトには、追加のナビゲーションメニュー用のブロックがあります(topmenu
):
layout.twig.html
<div class="row" id="secondary-nav">
<div class="span12">
{% block topmenu %}{% endblock %}
</div>
</div>
重複するサブリクエストの例
これが私の見解です。{% render ... %}
タグを使用topmenu
して、「ナビゲーション」コントローラーにサブリクエストを発行してブロックを埋めます。
index.html.twig
{% extends "FooBundle::layout.html.twig" %}
{% block topmenu %}
{% render "FooBundle:Navigation:index" with { 'active': 'feedback' } %}
{% endblock %}
これまでのところ、とても良いですが、このようにすると、なんらかの理由でサブリクエストが2回発行されます。2回表示されていませんが、SQLクエリ数が増え、symfony2プロファイラーにも2つの同一のサブリクエストが表示されています。
単一のサブリクエストの例
このようなブロックの外側にタグを配置する{% render ... %}
と、1つのサブリクエストのみが発生します。
index.html.twig
{% extends "FooBundle::layout.html.twig" %}
{% render "FooBundle:Navigation:index" with { 'active': 'feedback' } %}
{% block topmenu %}
{% endblock %}