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>
ご覧のとおり、2 つのテンプレート パーシャルはデフォルトで相互に含まれています ({% if dOptions|default(true) %}
と{% if dInsurances|default(true) %}
)。適切に停止しないと、無限ループが発生し、最大ネスト レベルの致命的なエラーでアプリケーションが中断します。
部分的な optionNode が insuranceNode に含まれている場合、テンプレート vardInsurances
が false に設定されdInsurances
、optionNode の var が false に設定されます。それでも何らかの理由で、optionNode は、dInsurances
insuranceNode によって設定されたテンプレート変数よりもデフォルト (true) を優先します。
default() フィルターがdInsurances
optionNode から削除された場合、期待どおりに機能します。また、dInsurances
true に設定すると、期待どおりにクラッシュします。
default() フィルターの仕組みを誤解していますか? それとも、include ディレクティブを介して渡された変数をテンプレートに継承する必要がありますか?
どんな助けでも大歓迎です。前もって感謝します :)