В 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

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

Ответ 1

Пример Twig:

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

Ответ 2

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

{% if myVar in someOtherArray|keys %}

Ответ 3

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

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

Подробный ответ

Контекст

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

Проблема

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

Решение

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

Example01

{#- ****************************************
  testing for a single key in associative array
  -#} 
  {%- set mystring = myarray['key-no-existo'] |default('__BLANK__')  -%}

{#- ****************************************
  testing for a multiple keys in associative array
  -#} 
  {%- set mystring = myarray['alpha']
        |default(myarray['bravo'])
        |default(myarray['charlie'])
        |default('__BLANK__')
        -%}

См. также