Twigでnullをチェックする方法は?


回答:


516

正確に何が必要かに応じて:

  • is null値がであるかどうかを確認しますnull

    {% if var is null %}
        {# do something #}
    {% endif %}
  • is defined 変数が定義されているかどうかを確認します。

    {% if var is not defined %}
        {# do something #}
    {% endif %}

さらに、is sameas2つの値のタイプを厳密に比較するテストは、nullfalse)以外の値をチェックする場合に役立ちます。

{% if var is sameas(false) %}
    {# do something %}
{% endif %}

71
そして、何かがnullでないかどうかをチェックするには、次のようにします{% if var is not null %}
J.-BC

4
$ var == nullは$ varが0でtrueを返しますが、$ varがnullはfalseを返します
daSn0wie

$ varがnullの場合、$ var == 0はtrueを返すことにも注意してください
ペッター・ソデルランド14年

また、PHPのとは違っisset()機能、is defined戻りますtrue変数が定義されている場合、それの値はnullです。
Pavel Petrov

1
注意:のように変数の小枝2.xのチェックが値に等しいとis_ sameasしなければなら{% if var is same as(false) %}ない{% if var is sameas(false) %}参照ドキュメントのURL => twig.symfony.com/doc/2.x/tests/sameas.html
アーメドhamdy

127

twigでデフォルト値を設定する方法:http : //twig.sensiolabs.org/doc/filters/default.html

{{ my_var | default("my_var doesn't exist") }}

または、nullのときに表示したくない場合:

{{ my_var | default("") }}

1
だから、区別んundefined or emptynull
ふわふわした

6
これは正しいチェック方法のようです...多くの賛成票がないのは残念です。
mr-sk

1
まさに私が探していたもの。あなたが持っていることを確認する必要がありました| defaultを使用して、次のように別の変数にデフォルト設定を試すことができます:{{my_var | default(my_var2)}}テストしたばかりですが、次のようにチェーンを続けることもできます:{{my_var | デフォルト(my_var2)| default( "my_var and my_var2 do not exist")}}
CTS_AE

34

前提がなければ、答えは次のとおりです。

{% if var is null %}

しかし、これはtrueがtrueの場合にのみ当てはまり、評価される他の値(ゼロ、空の文字列、空の配列など)にvarは当てはまりNULLませんfalse。また、var定義されていない場合はエラーとなります。より安全な方法は次のとおりです。

{% if var is not defined or var is null %}

これは次のように短縮できます。

{% if var|default is null %}

defaultフィルターに引数を指定しない場合は、NULL(デフォルトの一種)と見なされます。したがって、変数が空であるかどうか(null、false、空の文字列/配列など)を確認するための最短かつ最も安全な方法(私は知っています):

{% if var|default is empty %}

7

できないと思います。これは、変数がtwigテンプレートで定義されていない(設定されていない)場合、その変数は(小枝の用語では)NULLまたはのように見えるためnoneです。これは、テンプレートで発生する不良アクセスエラーを抑制するためのものです。

Twig(===)には「アイデンティティー」がないため、これはあなたができる最高の方法です

{% if var == null %}
    stuff in here
{% endif %}

これは次のように変換されます:

if ((isset($context['somethingnull']) ? $context['somethingnull'] : null) == null)
{
  echo "stuff in here";
}

あなたのあなたの良い場合には、どのタイプのジャグリングは、手段のようなものがあること0''FALSENULL、および未定義のvarはまた、その文が真のようになります。

IDをTwigに実装するように依頼することをお勧めします。


2
ケンドールは彼らにそれを実装することを提案するのは正しいです-私はTwigのgithubの課題追跡に実装されるものを求める良い経験しかありませんでした。彼らはとてもフレンドリーでプロフェッショナルです。
Shabbyrobe 2010

@ kendall-hopkins好奇心旺盛です。いつ使用するのが適切{if var is none}で、PHPの同等機能は何ですか?
12

@noisebleedはに{% if abcxyz is none %}なりif (isset($context["abcxyz"])) { $_abcxyz_ = $context["abcxyz"]; } else { $_abcxyz_ = null; } if ((null === $_abcxyz_)) { echo "hi"; }ます。したがって、基本的に値が未定義またはnullの場合、それはtrueになります。
ケンダルホプキンス

1
@noisebleed refのnoneエイリアスでもあります。null
ケンダルホプキンス

この回答に相当もの使用になり{% if var is empty %} twig.sensiolabs.org/doc/tests/empty.html PHPに変換if (empty($var))falsey値に対して評価する(こと!isset, null, 0, array(), "", false, "0", 0.0php.net/manual/en/function.empty.phpすることができます{% if var is same as(var) %}ID(===)にも使用します。twig.sensiolabs.org/doc/tests/sameas.html
fyrye

5
     //test if varibale exist
     {% if var is defined %}
         //todo
     {% endif %}

     //test if variable is not null
     {% if var is not null %}
         //todo
     {% endif %}

この回答が現在受け入れられている回答よりも優れていると思うのはなぜですか。
STT LCU 2013

StackOverflowへようこそ!すでに受け入れられている回答との違いは何ですか?それは時代遅れですか?なぜあなたの答えは既存のものよりも優れていますか?
Artemix 2013

@STTLCU彼は含まれていif var is not nullます。
crmpicco

4

また、1行でそれを行うこともできます。

{{ yourVariable is not defined ? "Not Assigned" : "Assigned" }}

3

次のコードを使用して、

{% if var is defined %}

var is variable is SET

{% endif %}

0

また、変数がARRAYの場合、いくつかのオプションもあります。

{% if arrayVariable[0] is defined %} 
    #if variable is not null#
{% endif %}

または

{% if arrayVariable|length > 0 %} 
    #if variable is not null# 
{% endif %}

これは、アレイis definedが次の場合にのみ機能しますNULL

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.