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