Twig

灵活、快速且安全
PHP 的模板引擎

a Symfony Product
Docs Tags use
您正在阅读 Twig 3.x 的文档。切换到 Twig 1.x2.x 的文档。

问题与反馈

许可证

Twig 文档 根据新的 BSD 许可证 获得许可。

use

注意

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

模板继承是 Twig 最强大的功能之一,但它仅限于单继承;一个模板只能扩展另一个模板。这种限制使模板继承易于理解且易于调试

1
2
3
4
{% extends "base.html.twig" %}

{% block title %}{% endblock %}
{% block content %}{% endblock %}

水平重用是一种实现与多重继承相同目标的方法,但没有相关的复杂性

1
2
3
4
5
6
{% extends "base.html.twig" %}

{% use "blocks.html.twig" %}

{% block title %}{% endblock %}
{% block content %}{% endblock %}

use 语句告诉 Twig 将 blocks.html.twig 中定义的块导入到当前模板中(它类似于宏,但用于块)

1
2
{# blocks.html.twig #}
{% block sidebar %}{% endblock %}

在此示例中,use 语句将 sidebar 块导入到主模板中。该代码在很大程度上等同于以下代码(导入的块不会自动输出)

1
2
3
4
5
{% extends "base.html.twig" %}

{% block sidebar %}{% endblock %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}

注意

仅当 use 标签不扩展另一个模板、不定义宏且主体为空时,它才导入模板。但它可以使用其他模板。

注意

由于 use 语句的解析独立于传递给模板的上下文,因此模板引用不能是表达式。

主模板还可以覆盖任何导入的块。如果模板已经定义了 sidebar 块,则 blocks.html.twig 中定义的块将被忽略。为了避免名称冲突,您可以重命名导入的块

1
2
3
4
5
6
7
{% extends "base.html.twig" %}

{% use "blocks.html.twig" with sidebar as base_sidebar, title as base_title %}

{% block sidebar %}{% endblock %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}

parent() 函数自动确定正确的继承树,因此可以在覆盖导入模板中定义的块时使用它

1
2
3
4
5
6
7
8
9
10
{% extends "base.html.twig" %}

{% use "blocks.html.twig" %}

{% block sidebar %}
    {{ parent() }}
{% endblock %}

{% block title %}{% endblock %}
{% block content %}{% endblock %}

在此示例中,parent() 将正确地从 blocks.html.twig 模板调用 sidebar 块。

提示

重命名允许您通过调用“父”块来模拟继承

1
2
3
4
5
6
7
{% extends "base.html.twig" %}

{% use "blocks.html.twig" with sidebar as parent_sidebar %}

{% block sidebar %}
    {{ block('parent_sidebar') }}
{% endblock %}

注意

您可以在任何给定的模板中使用任意数量的 use 语句。如果两个导入的模板定义了相同的块,则最后一个获胜。