У Twig перевірте, чи існує певний ключ масиву


80

У 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 - це просто механізм шаблонів. Ви знаєте це правильно?
itachi

3
Ви можете використовувати функцію "attribute": twig.sensiolabs.org/doc/functions/attribute.html {% якщо визначений атрибут (масив, ключ)%} // зробити щось {% endif%}
Денне

@Vega Ви повинні додати це як відповідь, оскільки це, здається, єдиний спосіб перевірити ключ, який не є одним словом, наприклад data-value.
insertusername тут

Відповіді:


187

Приклад гілочки:

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

2
Чому ми не можемо просто використовувати {% if array.key %}? Що не так з ним? У JS це цілком дійсне твердження, але не в Twig!
dVaffection

3
{% if array.key %}є дійсним, але це синтаксис, щоб перевірити, чи порожній ключ масиву. twig.sensiolabs.org/doc/tags/if.html#if
array-pop-tarts

21
Якщо ключ є змінною, вам потрібно використовувати {% if array[ key ] %}або {% if array[ key ] is defined %}. array.keyнамагається отримати доступ до індексу "ключ" у масиві.
MarthyM

25

Ви можете використовувати функцію keysгілочки

{% if myVar in someOtherArray|keys %}


1
Це зробило для мене роботу, тай!
Маркі

2
Це погано, якщо використовується в циклі ... Є набагато кращі відповіді, наприклад, використання "визначено" .. наприклад, {% if someOtherArray [myVar] визначено%}
Стів Чайлдс,

Це працює краще у тих випадках, коли клавіші не зручні для роботи машини. Наприклад array ['not-friendly']
burntblark

3

Швидка відповідь (TL; DR)

  • DeveloperTLindel хоче перевірити наявність ключа масиву в Twig.
  • DeveloperTLindel хоче затримати будь-які помилки, пов'язані з невизначеним ключем.
  • З цим можна впоратися за допомогою defaultфільтра.

Детальна відповідь

Контекст

  • Twig 2.x (остання версія станом на 08.03.2017)
  • Загальне використання defaultфільтра.

Проблема

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

Рішення

  • DeveloperTLindel може використовувати defaultфільтр.
  • defaultФільтр уловлює будь-які винятки внаслідок невизначеної змінної, і дозволяє короткого замикання substition альтернативного значення.
  • defaultФільтр ланцюгової.

Приклад01

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

{# - ******************************************
  тестування кількох ключів в асоціативному масиві
  - #} 
  {% - встановити mystring = myarray ['alpha']
        | за замовчуванням (myarray ['bravo'])
        | за замовчуванням (myarray ['charlie'])
        | за замовчуванням ('__ BLANK__')
        -%}

Дивитися також

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.