我在树枝模板中有以下构造来创建 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 中时,模板 vardInsurances
设置为 false,这应该将dInsurances
optionNode 中的 var 设置为 false。然而,由于某种原因,optionNode 仍然更喜欢 default(true),dInsurances
而不是由 insuranceNode 设置的模板变量。
如果从dInsurances
optionNode 中删除 default() 过滤器,它会按预期工作。此外,当dInsurances
设置为 true 时,它会按预期崩溃。
我是否误解了 default() 过滤器的机制?还是应该在模板中继承通过 include 指令传递的变量?
任何帮助深表感谢。提前致谢 :)