0

小枝を使用していて、 と に問題がincludeありextendsます。

index.html.twig に含めているファイル header.html.twig があります。それはうまくいきます。

extendsただし、header.html.twig ファイルの一部をindex.html.twigで上書きしようとしています。私が思いついたコードは次のとおりです。

<!-- index.html.twig -->
{% include '::header.html.twig' %}
    {% extends '::header.html.twig' %}
    {% block head %}
        <li class="active"><a href="#login">Login</a></li>
    {% endblock %}

ただし、このコードは「別のテンプレートを拡張するテンプレートは本体を持てません....」という例外をスローします。

どうすればこれを修正できますか?

4

2 に答える 2

2

{% block... %} {% endblock %}テンプレートには、別のタグを拡張するタグのみを含めることができます。

あなたの場合、あなたが達成しようとしていることが正しく得られた場合、header.html.twig で空のブロックを定義し (最初に)、index.html.twig でそのブロックをオーバーライドできます。

{% block foo %}
    {% include "header.html.twig" %}
{% endblock %}
于 2013-08-07T11:10:11.087 に答える
1

ブロックの外側で何かをしている場合、それらは twig ファイルの本体と見なされます。例外が明確に示すように、twig テンプレートを拡張する場合は、拡張ファイルに含まれるいくつかのブロックを本体なしで上書きする必要があります。

{% extends %}拡張にはすでにコンテンツが含まれているため、前に何も含めずにタグを使用する必要があります。パッケージ化された "base.html.twig" ファイルは良い例です: アプリケーションのあらゆる場所で使用されるコードを base.html.twig ファイルに入れます。

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>{% block title %}Welcome!{% endblock %}</title>
        {% block stylesheets %}{% endblock %}
        <link rel="shortcut icon" href="{{ asset('favicon.ico') }}" />
    </head>
    <body>
        {% block body %}{% endblock %}
        {% block javascripts %}{% endblock %}
    </body>
</html>

あなたの場合、{% block head %}{% endblock %}body ブロックの上に a を追加してから、index.html.twig ファイルでこのブロックを上書きしてそれを満たすことができます。

{% extends '::base.html.twig' %}
{% block head %}
    <li class="active"><a href="#login">Login</a></li>
{% endblock %}

これは最終的に出力されます:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Welcome!</title>
        <link rel="shortcut icon" href="/favicon.ico" />
    </head>
    <body>
       <li class="active"><a href="#login">Login</a></li>
    </body>
</html>

結論

extendsとの違いはinclude、拡張ファイルからブロックをオーバーライドできることですinclude

于 2013-08-07T11:12:43.920 に答える