目前正在使用 Symfony2 和 Twig,我正在尝试覆盖包含的模板中的 block 。让我解释一下:
{# base.html.twig #}
{% block content %}{% endblock content %}
<!--Some html Code -->
{% block javascripts %}
<!--Some scripts included like jQuery-->
{% endblock javascripts %}
在另一个文件中:
{# page.html.twig #}
{% extends 'base.html.twig' %}
{% block content %}
{% include 'form.html.twig' %}
{% endblock content %}
最后:
{# form.html.twig #}
<form method="post" action="something">
</form>
{# I am trying somehow to override the "javascripts" block here,
unfortunately I didn't figured out how to to that
#}
{% block javascripts %}
{{ parent() }}
<!--Some JS here-->
{% endblock javascripts %}
有没有办法做我想做的事?
最佳答案
这里你需要的是多重继承。但是就像 php 一样,twig 没有多重继承。就像 php 有 traits 一样,twig 有一个缓和的方法叫做 use。 .请记住,twig 被编译为 php。我认为在 use
语句中使用的 block 最终会编译成特征。
首先,用你想在不同地方重用的 block 创建你的“特征”:
{% block my_form %}
<form method="post" action="something">
</form>
{% endblock %}
{% block form_specific_javascript %}
<!--Some JS here-->
{% endblock}
然后,在您的页面模板中,调用“特征”,并重用这些 block :
{# page.html.twig #}
{% extends 'base.html.twig' %}
{% block content %}
{% use 'form.html.twig' %}
{{ block('my_form') }}
{% endblock content %}
{# override the javascript block #}
{% block javascripts %}
{{parent()}}
{{block('form_specific_javascript')}}
{% endblock %}
所以如您所见,您不能从表单模板中完成所有操作,您必须做一些 在您的页面模板中布线。尽管如此,调用 block 还是比复制/粘贴好 它的内容,不是吗?
关于symfony - 在 Twig 中包含的模板中覆盖 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22045705/