Prüfen Sie in Twig, ob ein bestimmter Schlüssel eines Arrays existiert

Lesezeit: 3 Minuten

Benutzer-Avatar
Benutzer852610

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

In der Templating-Sprache Twig können wir prüfen, ob eine Variable oder die Eigenschaft eines Objekts existiert, indem Sie einfach ein verwenden if Aussage, etwa so:

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

Aber wie prüfen wir, ob ein Schlüssel von an Reihe existiert mit Twig? 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 Methoden zum Übergeben von Daten in eine Vorlage die Verwendung von Arrays ist, scheint es, als ob es eine Möglichkeit geben sollte, dies zu tun. Irgendwelche Gedanken?

  • Twig ist nur eine Template-Engine. Du weißt es richtig?

    – Itachi

    28. November 2012 um 14:28 Uhr

  • Sie können die Funktion “Attribut” verwenden: twig.sensiolabs.org/doc/functions/attribute.html {% if attribute(array, key) is defined %} // etwas tun {% endif %}

    – Dennis

    13. März 2015 um 14:47 Uhr


  • @Vega Sie sollten das als Antwort hinzufügen, da dies die einzige Möglichkeit zu sein scheint, nach einem Schlüssel zu suchen, der kein einziges Wort ist, wie z data-value.

    – Benutzernamen hier einfügen

    26. Oktober 2015 um 10:09 Uhr

Zweig Beispiel:

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

  • Warum können wir nicht einfach verwenden {% if array.key %}? Was stimmt damit nicht? In JS ist es eine absolut gültige Aussage, aber nicht in Twig!

    – Dmitri

    11. Februar 2016 um 18:49 Uhr

  • {% if array.key %} ist gültig, aber es ist die Syntax, um zu prüfen, ob der Array-Schlüssel leer ist. twig.sensiolabs.org/doc/tags/if.html#if

    – Array-Pop-Tarts

    28. August 2016 um 5:02 Uhr

  • Wenn key eine Variable ist, müssen Sie verwenden {% if array[ key ] %} oder {% if array[ key ] is defined %}. array.key versucht, auf den Index ‘key’ im Array zuzugreifen.

    – MarthyM

    1. Dezember 2016 um 8:36 Uhr

Du kannst den … benutzen keys Zweigfunktion

{% if myVar in someOtherArray|keys %}

  • Das hat die Arbeit für mich erledigt, ty!

    – Marcky

    18. Mai 2017 um 16:00 Uhr

  • Dies ist schlecht, wenn es in einer Schleife verwendet wird … Es gibt viel bessere Antworten, z. B. die Verwendung von ‘ist definiert’ … zB {% if someOtherArray[myVar] ist definiert %}

    – Steve Childs

    8. März 2018 um 11:16 Uhr

  • Dies funktioniert besser in Fällen, in denen die Schlüssel nicht maschinenfreundlich sind. ZB Array[‘not-friendly’]

    – Burntblark

    29. Oktober 2019 um 12:07 Uhr

  • Wenn Sie einen dynamischen Schlüsselnamen verwenden, ist diese Antwort am besten.

    – machbar

    19. Juli 2021 um 13:12 Uhr

Benutzer-Avatar
dreftymac

Schnelle Antwort (TL;DR)

  • DeveloperTLindel möchte die Existenz eines Array-Schlüssels in Twig testen.
  • DeveloperTLindel möchte alle Fehler im Zusammenhang mit undefinierten Schlüsseln abfangen.
  • Dies kann mit der behandelt werden default Filter.

Ausführliche Antwort

Kontext

  • Twig 2.x (neueste Version vom Mi 08.03.2017)
  • Allgemeine Verwendung des default Filter.

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 nicht definierte Schlüssel verursacht werden.

Lösung

  • DeveloperTLindel kann die verwenden default Filter.
  • Das default filter fängt alle Ausnahmen aufgrund undefinierter Variablen ab und ermöglicht die kurzgeschlossene Ersetzung eines alternativen Werts.
  • Das default Filter ist verkettbar.

Beispiel01


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

Siehe auch

  • SO: Ähnliche Frage in Bezug auf nicht vorhandene oder Nullvariablen
  • SO: Allgemeine Verwendung des Standardfilters

1355110cookie-checkPrüfen Sie in Twig, ob ein bestimmter Schlüssel eines Arrays existiert

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy