Twig 骨架文件中的变量{%set%}';s';区块';don';不会被认出来,而且可以';是否在扩展文件时不使用?

Twig 骨架文件中的变量{%set%}';s';区块';don';不会被认出来,而且可以';是否在扩展文件时不使用?,twig,symfony,symfony-3.1,Twig,Symfony,Symfony 3.1,我有一个symfony3/细枝骨架模板 page1/skeleton.twig {# set default values #} {% block content %} {% set test = { sec1: { title: "null", content: 'null' }, } %} {% endblock %}

我有一个symfony3/细枝骨架模板

page1/skeleton.twig
    {# set default values #}
    {% block content %}
    {% set test = {
            sec1: {
                title:   "null",
                content: 'null'
            },
      }
    %}
    {% endblock %}
    <ul>
19        {% for sec in test[0:] %}
        <li>
            <p>{{ sec.title }}</p>
            <div>
                <p>{{ sec.content }}</p>
            </div>
        </li>
     {% endfor %}
    </ul>
但是当我生成/发布页面时,Symfony会触发一个错误

Variable "test" does not exist in :page1:skeleton.html.twig at line 19
500 Internal Server Error - Twig_Error_Runtime
抱怨骨架本身

该“测试”数组在骨架中定义。无法阅读“block”、“extends”和“set”上的文档,并且无法找出问题的确切原因


我需要更改什么才能消除此错误?

在文件page1/skeleton.twig中更改此错误:

{% for sec in test %}
那就行了。
我试过了。确保你明白为什么

小树枝中的
有自己的变量范围。
块内创建的变量不能在块外访问

Imo您应该只测试变量是否存在,否则创建默认值:

骷髅枝

{%如果未定义测试%}
{% 
设置测试={
第1条:{
标题:“空”,
内容:“空”
},
}
%}
{%endif%}
    {测试[0:]%中的秒数为%1}

  • @黑暗者哇,有点像Twigfidle。很高兴知道:DHi@DarkBee和@dragoste是的,你是对的。我只是想让OP做些工作,不是让你做他的工作。所以,谢谢你的否决票!他已经评论了他的错误,关于区块外的变量,这是一个问题。但他没有承认自己的其他错误,例如在第20行的未关闭段落标签上。OP甚至没有努力尝试一个
    {{{dump(test)}}
    来看看它显示了什么,并从我的答案中找出我想让他做什么。再次感谢投了反对票。我真的很感激!顺便说一句,你的回答甚至没有帮助OP完成他想要做的事情,也就是扩展骨架…是的,黑暗者做了。这就是为什么我接受了他的回答,并说了声谢谢。至于工作?哈哈,有趣的家伙。在别处抱怨你的反对票。它们是应得的。>在块内创建的变量不能在块外访问。我读到过,块可以访问外部范围。现在我明白了,这与我的假设正好相反。:-/>在我看来,您应该只测试变量是否存在,否则创建有效的默认值。“addl”数据仍然可以在.twig“extends”中,只是不能在“block”中。在IIUC中,细枝编译负责顺序、处理扩展模板并在范围内设置变量,覆盖父级的“如果未定义”默认值。谢谢约翰,你还需要帮忙吗?
    {% for sec in test %}
    
        {% if not test  is defined %}
            {% 
                set test = {
                    sec1: {
                        title:   "null",
                        content: 'null'
                    },
                }
            %}
        {% endif %}
        <ul>
        {% for sec in test[0:] %}
            <li>
                <p{{ sec.title }}</p>
                <div>
                    <p>{{ sec.content }}</p>
                </div>
            </li>
        {% endfor %}
        </ul>
    
    <?php
        echo $twig->render('page/page.twig', array(
               'foo' => [
                   'title' => 'title1',
                   'content' => content1',
                ],
        );