Як перевірити нуль у Twig?


Відповіді:


516

Залежно від того, що саме вам потрібно:

  • is nullперевіряє, чи є значення null:

    {% if var is null %}
        {# do something #}
    {% endif %}
    
  • is defined перевіряє, чи визначена змінна:

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

Крім того, is sameasтест, який здійснює чітке порівняння двох значень, може бути цікавим для перевірки значень, відмінних від null(наприклад false):

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

71
А щоб перевірити, чи щось не є нульовим, просто зробіть{% if var is not null %}
J.-BC

4
швидко зверніть увагу, що: $ var == null поверне справжнє значення $ var - це 0, але $ var є null, повернеться помилковим
daSn0wie

Також зауважте, що $ var == 0 повернеться істинним, якщо $ var недійсний
Петтер Содерлунд

Крім того, на відміну від isset()функції PHP , is definedвін повернеться, trueякщо змінна буде визначена і її значення буде null.
Павло Петров

1
Примітка: в якості Twig перевірка 2.x для змінної дорівнює значенню , як is_ sameasповинно бути {% if var is same as(false) %}НЕ {% if var is sameas(false) %}побачити Doc URL => twig.symfony.com/doc/2.x/tests/sameas.html
Ahmed Хамді

127

Як встановити значення за замовчуванням у twig: http://twig.sensiolabs.org/doc/filters/default.html

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

Або якщо ви не хочете, щоб він відображався після нуля:

{{ my_var | default("") }}

1
Тож вона відрізняє undefined or emptyі null?
Пухнастий

6
Здається, це правильний спосіб перевірити ... Соромно, що в ньому немає багатьох відгуків.
mr-sk

1
Саме те, що я шукав. Довелося переконатися, що у вас | за замовчуванням, який можна спробувати дефолтувати до іншої змінної, наприклад: {{my_var | за замовчуванням (my_var2)}} Я щойно тестував, але ви навіть можете продовжувати ланцюг так: {{my_var | за замовчуванням (my_var2) | за замовчуванням ("my_var та my_var2 не існують")}}
CTS_AE

34

Без жодних припущень відповідь така:

{% if var is null %}

Але це буде справедливо лише в тому випадку, якщо 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

Я не думаю, що ти можеш. Це тому, що якщо змінна не визначена (не встановлена) у шаблоні гілочок, вона має вигляд NULLабо none(у дуговому значенні). Я майже впевнений, що це запобігає появі помилок, що виникають у шаблоні.

Через відсутність "ідентичності" у Twig ( ===) це найкраще, що можна зробити

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

Що означає:

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

Що , якщо ви добре в вашому типу жонглювання , означає , що такі речі, як 0, '', FALSE, NULLі невизначені змінні будуть також зробити це твердження вірне.

Моя пропозиція - попросити ввести особу в Twig.


2
Кендалл має рацію запропонувати їх здійснити - у мене не було нічого, окрім гарного досвіду, який вимагав, щоб речі були реалізовані на трекері випуску github Twig. Вони дуже доброзичливі та професійні.
Шабіроб

@ kendall-hopkins З цікавістю, коли це доцільно використовувати {if var is none}та який еквівалент PHP?
шумів

@noisebleed {% if abcxyz is none %}стає if (isset($context["abcxyz"])) { $_abcxyz_ = $context["abcxyz"]; } else { $_abcxyz_ = null; } if ((null === $_abcxyz_)) { echo "hi"; }. Отже, якщо значення не визначене або недійсне, воно буде істинним.
Кендалл Хопкінс

1
@noisebleed Також noneє псевдонімом для null реф .
Кендалл Хопкінс

Еквівалент цієї відповіді також буде використовувати {% if var is empty %} twig.sensiolabs.org/doc/tests/empty.html, що перекладається на PHP, if (empty($var))що оцінює значення фальси ( !isset, null, 0, array(), "", false, "0", 0.0) php.net/manual/en/function.empty.php Ви можете також використовувати {% if var is same as(var) %}для ідентичності ( ===). 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

Ласкаво просимо до StackOverflow! Чим відрізняється від вже прийнятої відповіді? Це застаріло? Чому ваша відповідь краща за вже існуючу?
Артемікс

@STTLCU Він у тому числі if var is not null.
crmpicco

4

Для цього також можна використовувати один рядок:

{{ 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 definedAND єNULL

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.