Php 将基模板变量重写为来自另一个bundle{Symfony 3 TWIG}的子模板

Php 将基模板变量重写为来自另一个bundle{Symfony 3 TWIG}的子模板,php,twig,symfony,Php,Twig,Symfony,我在base.html.twig文件中添加了一些变量 我在“bundle”中有另一个文件index.html.twig文件 我在index.html.twig中扩展了base.html.twig文件,该文件工作正常,因为我可以在调用index.html.twig时看到base中的所有内容都在浏览器中呈现,但是当我试图覆盖index.html.twig中base.html.twig文件的变量时,它不起作用 这是代码 base.html.twig <!DOCTYPE html>

我在base.html.twig文件中添加了一些变量 我在“bundle”中有另一个文件index.html.twig文件

我在index.html.twig中扩展了base.html.twig文件,该文件工作正常,因为我可以在调用index.html.twig时看到base中的所有内容都在浏览器中呈现,但是当我试图覆盖index.html.twigbase.html.twig文件的变量时,它不起作用

这是代码

base.html.twig

    <!DOCTYPE html>
        <html>
            <head>
                <meta charset="UTF-8" />
                <title>{% block title %}Welcome!{% endblock %}</title>
                {% block stylesheets %}

                {% endblock %}
                <link rel="icon" type="image/x-icon" href="{{ asset('favicon') }}" />
            </head>
            <body>
           {% set isHeader      = (isHeader|default(true)) %}

{% if isHeader == true %}
            <div class="container-fluid header">
                {% include 'header.html.twig' %}
                {% block header %}

                {% endblock %}
            </div>
            {% endif %}

    </body>
    </html>
{% extends 'base.html.twig' %}

{% set isHeader         = false %}
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8" />
            <title>{% block title %}Welcome!{% endblock %}</title>
    <link rel="icon" type="image/x-icon" href="{{ asset('favicon') }}" />
        </head>

        <body>
    {% if isHeader == true %}
        <div class="container-fluid header">
        {% include 'header.html.twig' %}
            {% block header %}

            {% endblock %}
        </div>
    {% endif %}

{% block body %}

{% endblock %}

    {% if isFooter == true %}
        <div class="footer">
        {% include 'footer.html.twig' %}
            {% block footer %}

            {% endblock %}
        </div>
    {% endif %}

    <noscript><div class="alert alert-danger">You must enable Javascript on your browser for the site to work optimally and display sections completely.</div></noscript>
        </body>
    </html>
{% set isFooter         = true %}
{% set isHeader         = false %}

{% block body %}

{% endblock %}

这应该隐藏标题,但它仍然显示标题,好像我在base.html.twig文件中执行isHeader=false它工作正常你的方法太奇怪了,我不确定你为什么要这样做, 根据我从问题中发现的,试着做这样的事情:

底端:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8" />
            <title>{% block title %}Welcome!{% endblock %}</title>
            {% block stylesheets %}

            {% endblock %}
            <link rel="icon" type="image/x-icon" href="{{ asset('favicon') }}" />
        </head>
        <body>
       {%block top_header %}
            <div class="container-fluid header">
               {% include 'header.html.twig' %}
                {% block header %}

                {% endblock %}
            </div>
        {%endblock%}
</body>
</html>

我通过在symfony config.yml文件中设置twig的全局值找到了答案这里是代码

config.yml

twig:
    debug:            "%kernel.debug%"
    strict_variables: "%kernel.debug%"
    globals:
        isFooter: true
        isHeader: true
base.html.twig

    <!DOCTYPE html>
        <html>
            <head>
                <meta charset="UTF-8" />
                <title>{% block title %}Welcome!{% endblock %}</title>
                {% block stylesheets %}

                {% endblock %}
                <link rel="icon" type="image/x-icon" href="{{ asset('favicon') }}" />
            </head>
            <body>
           {% set isHeader      = (isHeader|default(true)) %}

{% if isHeader == true %}
            <div class="container-fluid header">
                {% include 'header.html.twig' %}
                {% block header %}

                {% endblock %}
            </div>
            {% endif %}

    </body>
    </html>
{% extends 'base.html.twig' %}

{% set isHeader         = false %}
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8" />
            <title>{% block title %}Welcome!{% endblock %}</title>
    <link rel="icon" type="image/x-icon" href="{{ asset('favicon') }}" />
        </head>

        <body>
    {% if isHeader == true %}
        <div class="container-fluid header">
        {% include 'header.html.twig' %}
            {% block header %}

            {% endblock %}
        </div>
    {% endif %}

{% block body %}

{% endblock %}

    {% if isFooter == true %}
        <div class="footer">
        {% include 'footer.html.twig' %}
            {% block footer %}

            {% endblock %}
        </div>
    {% endif %}

    <noscript><div class="alert alert-danger">You must enable Javascript on your browser for the site to work optimally and display sections completely.</div></noscript>
        </body>
    </html>
{% set isFooter         = true %}
{% set isHeader         = false %}

{% block body %}

{% endblock %}
变量isHeader=false将从基本模板中删除标题,以便在调用index.html.twig时不会呈现标题


任何其他解决方案人员请评论您的建议。

尝试不要在父模板中使用
set
{%if isHeader | default(true)==true%}
可能重复的我尝试了此链接,但不适用于我:(@malcolm谢谢你的回复我也尝试过你的技巧,但它也不起作用是的,它不起作用,奇怪的行为。我也尝试过,只有当我把值放在括号中(作为字符串)它起作用:
{%set var='true'%}
{%if var | default('false')='true'}
这一定是一个错误,因为我在父模板中转储了变量,并从子模板正确设置了该变量。到目前为止,它一直在Symfony 2中工作。{%include'header.html.twig%}{%block header%}{%endblock%}如果我按照你的建议做的话,我已经在头块中包含了一个文件,默认情况下会呈现,我不想也呈现那个部分。另外,每次我创建新包时添加空块并进行临时处理,这对我来说并不方便,相反,我将执行变量true/false,也可以从DB配置。我的问题是si我想在子范围中设置父范围的变量,这样当细枝被渲染时,它可以使用子范围变量进行决策,即移除或显示隐藏块+相应地设置引导网格大小