Twig 骨架文件中的变量{%set%}';s';区块';don';不会被认出来,而且可以';是否在扩展文件时不使用?
我有一个symfony3/细枝骨架模板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 %}
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',
],
);