Як перевірити нуль у 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.