我在樹枝模板下面的結構創建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