1

Twigを使用して3つのテンプレートを作成しました。最初のものにはブロックがA定義されており、2番目のものは最初のものから拡張されていますが、ブロックのコンテンツを設定する3番目のテンプレートが含まれていますA

ブラウザを介してb.html.twigをレンダリングするURLをロードする場合、ブロック内のコンテンツA(3番目のテンプレートで定義)は配置されません。ブロック_Aが定義されます。

例:

<!-- base.html.twig -->
{% block _css '' %}

{% block _header '' %}
{% block _content '' %}
{% block _footer '' %}

{% block _js '' %}


<!-- layout.html.twig -->
<!-- header and footer are placed in the raight zone -->
{% extends ::base.html.twig %}

{% block _header %}
    {% render "MyBundleBundle:Header:header"  %}
{% endblock %}

{% block _footer %}
    {% render "MyBundleBundle:Footer:footer" %}
{% endblock %}


<!-- my_template.html.twig -->
<!-- content is also placed in the right zone but css and js blocks in the included     template are not placed where declared in base.html.twig -->
{% extends MyBundleBundle::layout.html.twig %}
{% block _content %}
     SOME_CONTENT
     {% include MyBundleBundle::my_included_template.html.twig %}
{% endblock %}


<!-- my_included_template.html.twig -->
{% block _css %}
 <link.......................>
{% endblock %}

{% block _js %}
 <script..................>
{% endblock %}

MORE CONTENT BELONGING TO THE INCLUDED TEMPLATE

ここで私が期待しているのは、_cssはページの上部に表示されるコンテンツをブロックし、_jsは下部に表示されるコンテンツをブロックしますが、それは発生していません。私がどこで間違っているのかがわかるといいのですが、ありがとう!

4

1 に答える 1

1

インクルードタグは、あなたが考えている/望んでいる方法では機能しません。ファイルを現在のコンテキストに含めるだけです。つまり、ブロックを参照することはできません。ファイルの先頭にextendsタグがあるテンプレート内のブロックのみを参照できます。

これを機能させるには、テンプレートの設計方法を再構築する必要があります。含める代わりに、my_included_template.html.twigそのテンプレートをコントローラーで直接レンダリングする必要があります。そうすれば、継承されたブロックに完全にアクセスできます。

于 2012-12-13T15:58:29.327 に答える