我在树枝模板下面的结构创建XML:Twig默认过滤器重写定义的模板变量?
{# 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) %}
)。如果没有正确停止,它将导致无限循环,并且应用程序中断最大嵌套级别致命错误。
当insuranceNode中包含partial optionNode时,模板var dInsurances
设置为false,应将optionNode中的var dInsurances
设置为false。然而,由于某些原因,optionNode仍然优先于dInsurances
的默认值(true),而不是由insuranceNode设置的模板变量。
如果从optionNode中的dInsurances
中删除了默认()过滤器,它将按预期工作。同样当dInsurances
设置为true时,它会按预期崩溃。
我误解了default()过滤器的机制吗?还是应该通过include指令传递的变量在模板中被继承?
任何帮助,非常感谢。感谢提前:)
尽管对于我来说,以“false”形式传递的变量被认为是空的或未定义的,所以是这样。我会利用你的第二个建议,因为可能传递的变量是未定义的:)一个接受并赞扬你的先生。 –
默认过滤器归结为这个代码:'$ passed_value? $ passed_value:$ default_value',这就是为什么当传递false时,它使用默认值而不是传入的值。 – Maerlyn