php - not - twig starts




In Twig, controlla se esiste una chiave specifica di un array (2)

In PHP possiamo verificare se esiste una chiave in un array usando la funzione array_key_exists() .

Nel linguaggio di Twig templating possiamo verificare se una variabile o una proprietà di un oggetto esiste semplicemente usando un'istruzione if , come questa:

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

Ma come possiamo verificare se esiste una chiave di un array usando Twig? Ho provato {% if array.key %} , ma mi dà un errore:

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

Poiché uno dei principali modi di passare i dati in un modello è l'utilizzo di array, sembra che ci dovrebbe essere un modo per farlo. qualche idea?


Risposta rapida (TL; DR)

  • DeveloperTLindel vuole testare l'esistenza della chiave di array in Twig.
  • DeveloperTLindel vuole intercettare qualsiasi errore associato alla chiave non definita.
  • Questo può essere gestito usando il filtro default .

Risposta dettagliata

Contesto

  • Twig 2.x (ultima versione a partire da mer 2017-03-08)
  • Uso generico del filtro default .

Problema

  • Scenario:
  • DeveloperTLindel vuole testare l'esistenza della chiave di array in Twig.
  • DeveloperTLindel vuole evitare qualsiasi errore o eccezione causata da una chiave potenzialmente indefinita.

Soluzione

  • DeveloperTLindel può utilizzare il filtro default .
  • Il filtro default rileva eventuali eccezioni a causa della variabile non definita e consente la sottocrizione di cortocircuito di un valore alternativo.
  • Il filtro default è concatenabile.

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

Guarda anche


È possibile utilizzare la funzione di ramoscello dei keys

{% if myVar in someOtherArray|keys %}







short-circuiting