使用Twig从父模板访问子模板中的变量集

时间:2015-09-24 15:04:06

标签: symfony templates inheritance twig

我的模板中有以下设置。我有很多像这样的子模板,subject块每次都不同。

我有办法从父母那里访问孩子中的subjectTitle变量集吗?

父:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <meta name="viewport" content="width=device-width"/>
    </head>
    <body>
    <span style="display: none !important;">{{ preHeader }}</span>

子:

{% extends 'CRMPiccoMailerBundle:Email:base.html.twig' %}
{% block subject %}
    {% set subjectTitle = 'Thanks for ordering! Your Order is 1872.' %}
    {{ subjectTitle }}
{% endblock %}

2 个答案:

答案 0 :(得分:2)

实现所需结果的最佳方法是在父模板上创建一个空block,然后在子模板上设置它的值。

答案 1 :(得分:0)

是的,您可以像任何其他变量一样访问变量。一定要检查它是否已定义,并正确流动。

实施例

我使用子变量的一种方法是样式表:

base.html.twig

<html>
    <head>
         <link href="css/{{ style|default('base') }}.css" rel="stylesheet" />
    </head>
    <body>
        {% if style is not defined %}
        <p>Default style applied</p>
        {% else %}
        <p>Styling!</p>
        {% endif %}
        <!-- content here -->
    </body>
</html>

contact.html.twig

{% extends 'base.html.twig' %}
{% set style = 'contact' %}
...

在head部分中,我使用macro检查变量并显示默认值(如果未定义)(这仅适用于版本1.12+)。如果子模板定义了变量,它将使用其值,否则默认为基本样式表。但在身体中,我使用tags显示较旧的方式。根据是否定义了变量,决定输出哪个段落。