2010-07-16 6 views

ответ

423

В зависимости от того, что именно вам нужно:

  • 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 %} 
+1

Теперь это правильный ответ для twig –

+48

И чтобы проверить, не что-то не пустое, просто сделайте '{%, если var не null%}' –

+4

обратите внимание на то, что: $ var == null вернет true с $ var равно 0, но значение $ var равно null возвращает false – daSn0wie

5

Я не думаю, что вы можете. Это связано с тем, что если переменная не определена (не установлена) в шаблоне ветви, она выглядит как NULL или none (в терминологии веток). Я уверен, что это должно подавлять ошибки плохого доступа, возникающие в шаблоне.

Из-за отсутствия «идентичности» в Twig (===), это лучшее, что вы можете сделать

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

что переводится:

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

Что, если вы хорошо в вашем type juggling , означает, что такие вещи, как 0, '', FALSE, NULL, а также неопределенный var также сделают это утверждение истинным.

Мое предложение - попросить, чтобы личность была внедрена в Twig.

+2

Kendall вправе предположить, что они реализуют его - у меня не было ничего, кроме хороших впечатлений, прося о том, чтобы вещи были реализованы в трекерном выпуске Twig's github. Они очень дружелюбны и профессиональны. – Shabbyrobe

+0

@ kendall-hopkins Любопытно, когда целесообразно использовать '{if var is none}' и что такое эквивалент PHP? – noisebleed

+0

@noisebleed '{% if abcxyz is none%}' становится 'if (isset ($ context [" abcxyz "])) {$ _abcxyz_ = $ context [" abcxyz "]; } else {$ _abcxyz_ = null; } ' ' if ((null === $ _abcxyz_)) {echo "hi"; } '. Таким образом, в основном, если значение не определено или равно null, оно будет истинным. –

108

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

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

Или, если вы не хотите, чтобы показать, когда нуль:

{{ my_var | default("") }} 
+0

Так различается ли это 'undefined or empty' и' null'? – Fluffy

+6

Кажется, что это правильный способ проверить ... Позор, у него не так много оборотов. –

+1

Именно то, что я искал. Придется убедиться, что у вас есть | по умолчанию, который затем можно попробовать по умолчанию для другой переменной: {{my_var | default (my_var2)}} Я только что протестировал, но вы можете продолжить цепочку так: {{my_var | default (my_var2) | default («my_var и my_var2 не существуют»)}} –

3

вы можете использовать следующий код, чтобы проверить, является ли

{% if var is defined %} 

var is variable is SET 

{% endif %} 
30

Без каких-либо предположений ответ:

{% 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 %} 
4
 //test if varibale exist 
    {% if var is defined %} 
     //todo 
    {% endif %} 

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

Почему, по вашему мнению, этот ответ лучше, чем принятый в настоящее время? –

+0

Добро пожаловать в StackOverflow! В чем отличие от уже принятого ответа? Это устарело? Почему ваш ответ лучше уже существующих? – Artemix

+0

@STTLCU Он включает 'если var не null '. – crmpicco

0

Вы также можете использовать одну линию, чтобы сделать это:

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