41

これはどのように可能ですか?非常に奇妙な問題のようです(非常に単純なものが欠けていない限り):

コード:

{{ 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>

スクリーンショット

基本的に真なら出力するのですが、真かどうかをチェックしているわけではありません。

4

2 に答える 2

54

これは簡単に再現できます:

{% set nav = true %}
{% if nav == "top" %}
ok
{% endif %}

を表示しokます。

ドキュメントによると:

Twig ではどこでも式を使用できます。これらは通常の PHP と非常によく似た働きをするので、PHP を使用していない場合でも問題なく使用できるはずです。

また、純粋な PHP で次の式をテストする場合:

$var = true;
if ($var == "top") {
  echo 'ok';
}

こちらも正常に表示されます。

ポイントは、異なるタイプの変数を比較してはならないということです。ここでは、bool と string を比較します。文字列が空でない場合、または文字列にゼロしか含まれていない場合は、true と評価されます。

PHP のマニュアルを参照して、さまざまな型との比較方法を確認することもできます。

編集

sameasテストを使用して厳密な比較を行い、型のジャグリングの問題を回避できます。

于 2013-04-24T18:28:36.210 に答える