symfony - 在 Twig 中包含的模板中覆盖 block

标签 symfony twig block overriding

目前正在使用 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/

相关文章:

symfony - form_errors() 不显示错误

javascript - 为什么将 Backbone 和 Handlebar 的上下文放入初始化函数可以消除错误?

Magento:<操作方法="unsetChild">不删除 block

symfony - 如何在symfony2.X Controller 中设置标题并渲染不带renderView()方法的 Twig 模板

database - 在 Symfony 2.6 上用许多请求测试隔离

Symfony:如何避免自定义表单类型自动包装在 div 中?

symfony - 在 Twig 中本地化日期间隔

php - 如何将所有请求查询参数传递给 Twig symfony 2 中的嵌入式 Controller ?

forms - 覆盖表单模板 Symfony2, Twig 元素?

Ruby 做/结束 vs 大括号