これはどのように可能ですか?非常に奇妙な問題のようです(非常に単純なものが欠けている場合を除く)。
コード:
{{ dump(nav) }}
{% if nav == "top" %}
<div class="well">This would be the nav</div>
{% endif %}
出力:
boolean true
<div class="well">This would be the nav</div>
基本的に、trueの場合は出力されますが、trueをチェックすることを意図したものではありません。
これは簡単に再現可能です。
{% set nav = true %}
{% if nav == "top" %}
ok
{% endif %}
ok
を表示します。
ドキュメント によると:
Twigはどこでも式を許可します。これらは非常によく似た通常のPHP、そしてPHP快適に感じるはずです。
そして、純粋なPHP次の式でテストする場合:
$var = true;
if ($var == "top") {
echo 'ok';
}
また、okと表示されます。
ポイントは次のとおりです。異なるタイプの変数を比較しないでください。ここでは、boolと文字列を比較します。文字列が空でない場合、またはゼロだけが含まれていない場合、trueと評価されます。
PHPマニュアル を見て、さまざまなタイプとの比較方法を確認することもできます。
sameas テストを使用して厳密な比較を行い、型ジャグリングの問題を回避できます。