В Twig проверьте, существует ли конкретный ключ массива

В PHP мы можем проверить, существует ли ключ в массиве с помощью функции array_key_exists() .

На языке шаблонов Twig мы можем проверить, существует ли переменная или свойство объекта, просто используя оператор if , например:

 {% if app.user %} do something here {% else %} do something else {% endif %} 

Но как проверить, существует ли ключ массива с помощью Twig? Я пробовал {% if array.key %} , но это дает мне ошибку:

 Key "key" for array with keys "0, 1, 2, 3...648" does not exist 

Поскольку одним из основных способов передачи данных в шаблон является использование массивов, кажется, что должен быть какой-то способ сделать это. Есть предположения?

Пример Twig:

 {% if array.key is defined %} // do something {% else %} // do something else {% endif %} 

Вы можете использовать функцию твинов keys

{% if myVar in someOtherArray|keys %}

Быстрый ответ (TL; DR)

  • DeveloperTLindel хочет проверить наличие ключа массива в Twig.
  • DeveloperTLindel хочет уловить любые ошибки, связанные с неопределенным ключом.
  • Это можно обработать с использованием фильтра по default .

Детальный ответ

контекст

  • Twig 2.x (последняя версия от Wed 2017-03-08)
  • Использование фильтра по default общего назначения.

проблема

  • Сценарий:
  • DeveloperTLindel хочет проверить наличие ключа массива в Twig.
  • DeveloperTLindel хочет избежать ошибок или исключений, вызванных потенциально неопределенным ключом.

Решение

  • DeveloperTLindel может использовать фильтр по default .
  • Фильтр по default выбирает любые исключения из-за неопределенной переменной и допускает замену короткого замыкания альтернативного значения.
  • Фильтр по default является цепным.

Example01


 {# - ****************************************
   тестирование одного ключа в ассоциативном массиве
   - #} 
   {% - set mystring = myarray ['key-no-existo'] | default ('__ BLANK__') -%}

 {# - ****************************************
   тестирование нескольких ключей в ассоциативном массиве
   - #} 
   {% - set mystring = myarray ['alpha']
         | По умолчанию (MyArray [ 'браво'])
         | По умолчанию (MyArray [ 'чарли'])
         | По умолчанию ( '__ BLANK__')
         -%}

Смотрите также

  • SO: аналогичный вопрос, связанный с несуществующими или нулевыми переменными
  • SO: универсальное использование фильтра по умолчанию