Überprüfen Sie in Twig, ob ein bestimmter Schlüssel eines Arrays vorhanden ist

76

In PHP können wir mithilfe der Funktion überprüfen, ob ein Schlüssel in einem Array vorhanden ist array_key_exists().

In der Twig-Template-Sprache können wir überprüfen, ob eine Variable oder die Eigenschaft eines Objekts vorhanden ist, indem wir einfach eine ifAnweisung wie die folgende verwenden:

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

Aber wie überprüfen wir mit Twig , ob ein Schlüssel eines Arrays vorhanden ist? Ich habe es versucht {% if array.key %}, aber es gibt mir einen Fehler:

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

Da eine der wichtigsten Möglichkeiten zum Übergeben von Daten in eine Vorlage die Verwendung von Arrays ist, scheint es eine Möglichkeit zu geben, dies zu tun. Irgendwelche Gedanken?

user852610
quelle
Twig ist nur eine Template-Engine. Du weißt es richtig?
Itachi
3
Sie können die Funktion "attribute" verwenden: twig.sensiolabs.org/doc/functions/attribute.html {% wenn Attribut (Array, Schlüssel) definiert ist%} // etwas tun {% endif%}
Dennais
@Vega Sie sollten dies als Antwort hinzufügen, da dies die einzige Möglichkeit zu sein scheint, nach einem Schlüssel zu suchen, der kein einzelnes Wort ist, wie z data-value.
Insertusernamehere

Antworten:

180

Zweig Beispiel:

{% if array.key is defined %}
  // do something
{% else %}
  // do something else
{% endif %}
phpisuber01
quelle
2
Warum können wir nicht einfach verwenden {% if array.key %}? Was stimmt damit nicht? In JS ist es eine vollkommen gültige Aussage, aber nicht in Twig!
dVaffection
3
{% if array.key %}ist gültig, aber es ist die Syntax, um zu überprüfen, ob der Array-Schlüssel leer ist. twig.sensiolabs.org/doc/tags/if.html#if
Array-Pop-Tarts
18
Wenn key eine Variable ist, müssen Sie {% if array[ key ] %}oder verwenden {% if array[ key ] is defined %}. array.keyversucht, auf den Indexschlüssel im Array zuzugreifen.
MarthyM
24

Sie können die keysZweigfunktion verwenden

{% if myVar in someOtherArray|keys %}

Samir Patel
quelle
1
Das hat den Job für mich gemacht, ty!
Marcky
2
Dies ist schlecht, wenn es in einer Schleife verwendet wird ... Es gibt viel bessere Antworten, z. B. 'definiert'. ZB {%, wenn someOtherArray [myVar] definiert ist%}
Steve Childs
Dies funktioniert besser in Fällen, in denen die Schlüssel nicht maschinenfreundlich sind. ZB Array ['nicht freundlich']
Burntblark
3

Schnelle Antwort (TL; DR)

  • DeveloperTLindel möchte die Existenz eines Array-Schlüssels in Twig testen.
  • DeveloperTLindel möchte alle mit undefinierten Schlüsseln verbundenen Fehler abfangen.
  • Dies kann mit dem defaultFilter erledigt werden .

Detaillierte Antwort

Kontext

  • Twig 2.x (neueste Version vom Mi 2017-03-08)
  • Allzweckgebrauch des defaultFilters.

Problem

  • Szenario:
  • DeveloperTLindel möchte die Existenz eines Array-Schlüssels in Twig testen.
  • DeveloperTLindel möchte Fehler oder Ausnahmen vermeiden, die durch möglicherweise undefinierte Schlüssel verursacht werden.

Lösung

  • DeveloperTLindel kann den defaultFilter verwenden.
  • Der defaultFilter fängt alle Ausnahmen aufgrund einer undefinierten Variablen ab und ermöglicht das Kurzschließen eines alternativen Werts.
  • Der defaultFilter ist verkettbar.

Beispiel01

{# - ********************************************
  Testen auf einen einzelnen Schlüssel im assoziativen Array
  - #} 
  {% - setze mystring = myarray ['key-no-existo'] | default ('__ BLANK__') -%}

{# - ********************************************
  Testen auf mehrere Schlüssel im assoziativen Array
  - #} 
  {% - setze mystring = myarray ['alpha']
        | default (myarray ['bravo'])
        | default (myarray ['charlie'])
        | default ('__ BLANK__')
        -%}

Siehe auch

dreftymac
quelle