Twig简单覆盖包括

时间:2015-09-24 10:37:05

标签: symfony twig

我有一个简单的Twig模板,我想要从include中覆盖一个块。

base.html.twig

{% block razem %}
    {% include '_ga.code.html.twig' %}
{% endblock %}

_ga.code.html.twig

{% block wspolny %}
    should be common
{% endblock %}

{% block googleAnalitics %}
    for overridden
{% endblock %}

success.html.twig

{% extends 'base.hmtl.twig' %}

{% block razem %}
    {{ parent('wspolny') }}

    {% block googleAnalitics %}
        overriding part
    {% endblock %}
{% endblock %}

错误在哪里? http://twigfiddle.com/jsuk6a

我希望这样做:

should be common
overriding part

2 个答案:

答案 0 :(得分:2)

在twig中,您无法覆盖包含中的块。为此,您必须使用嵌入,但必须在使用模板中执行此操作,而不是在基础模板中执行此操作。

base.html.twig

{% block razem %}{% endblock %}

_ga.code.html.twig

{% block wspolny %}
    should be common
{% endblock %}

{% block googleAnalitics %}
    for overridden
{% endblock %}

success.html.twig

{% extends 'base.hmtl.twig' %}

{% block razem %}
    {% embed '_ga.code.html.twig' %}
        {% block googleAnalitics %}
            overriding part
        {% endblock %}
    {% endembed %}
{% endblock %}

答案 1 :(得分:-1)

我认为覆盖块并重用其他块的最佳方法是将基本模板扩展到要执行覆盖的位置(可能会将一些代码添加到预先存在的代码中)和应用所谓的horizontal reuse

  

水平重用是一种高级的Twig功能,在常规模板中几乎不需要。它主要用于需要在不使用继承的情况下使模板块可重用的项目。

从这一点开始,您应该只使用base.html.twig模板并扩展_ga.code.html.twig,如下所示:

success.html.twig

{% extends '_ga.code.hmtl.twig' %}
{# Simply use base - without overriding #}
{% use 'base.hmtl.twig' %}

    {% block googleAnalitics %}
        overriding part
    {% endblock %}

如果您想要对单个块进行重载,您还可以使用parent()函数;因此,您可以向扩展块添加一些其他信息。

如果你需要更复杂的东西,你应该去dynamic inheritance

{% extends ['base.html.twig', '_ga.code.html.twig'] %}