Как проверить на ноль в Twig?


279

Какую конструкцию я должен использовать, чтобы проверить, является ли значение NULL в шаблоне 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 вернет true с $ var = 0, но $ var is null вернет false
daSn0wie

Также обратите внимание, что $ var == 0 вернет true, если $ var равно нулю
Петтер Содерлунд

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

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

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

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

Или, если вы не хотите, чтобы он отображался, когда null:

{{ my_var | default("") }}

1
Так что же различает undefined or emptyи null?
Пушистый

6
Похоже, это правильный способ проверить ... Позор, у него не так много голосов.
MR-SK

1
Именно то, что я искал. Нужно было убедиться, что у вас есть | по умолчанию, который вы можете затем попробовать по умолчанию для другой переменной, например: {{my_var | default (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(по умолчанию). Итак, самый короткий и безопасный способ (я знаю), чтобы проверить, является ли переменная пустой (ноль, ложь, пустая строка / массив и т. Д.):

{% 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))который сравнивается со значением Falsey ( !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 definedANDNULL

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.