В 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

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

Author: dreftymac, 2012-11-28

3 answers

Пример ветки:

{% if array.key is defined %}
  // do something
{% else %}
  // do something else
{% endif %}
 135
Author: phpisuber01, 2012-11-28 14:29:20

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

{% if myVar in someOtherArray|keys %}

 13
Author: Samir Patel, 2017-01-23 21:23:06

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

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

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

Контекст

  • Ветка 2.x (последняя версия по состоянию на Ср 2017-03-08)
  • Универсальное использование default фильтр.

Проблема

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

Решение

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

Пример01


{#- ****************************************
  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__')
        -%}

См. также

 1
Author: dreftymac, 2017-05-23 12:10:32