【发布时间】:2012-05-31 14:25:10
【问题描述】:
我在树枝模板中有以下构造来创建 XML:
{# insuranceNode.xml.twig #}
<insurance>
<description></description>
...
{% if dOptions|default(true) %}
<options>
{% for option in insurance.options %}
{% include 'optionNode.xml.twig' with {
'option': option,
'dInsurances': false
}%}
{% endfor %}
</options>
{% endif %}
</insurance>
{# optionNode.xml.twig #}
<option>
<description></description>
...
{% if dInsurances|default(true) %}
<insurances>
{% for insurance in option.insurances %}
{% include 'insuranceNode.xml.twig' with {
'insurance': insurance,
'dOptions': false
}%}
{% endfor %}
</insurances>
{% endif %}
</options>
如您所见,默认情况下,两个模板部分是相互包含的({% if dOptions|default(true) %} 和 {% if dInsurances|default(true) %})。如果没有正确停止,它将导致无限循环,并且应用程序会因最大嵌套级别的致命错误而中断。
当部分 optionNode 包含在 insuranceNode 中时,模板 var dInsurances 设置为 false,这应该将 optionNode 中的 var dInsurances 设置为 false。然而由于某种原因 optionNode 仍然更喜欢 dInsurances 的默认值(true),而不是由 insuranceNode 设置的模板变量。
如果从 optionNode 中的 dInsurances 中删除 default() 过滤器,它会按预期工作。此外,当 dInsurances 设置为 true 时,它会按预期崩溃。
我是否误解了 default() 过滤器的机制?还是应该在模板中继承通过include指令传递的变量?
非常感谢任何帮助。在此先感谢:)
【问题讨论】: