En Twig, verifique si existe una clave específica de una matriz

3 minutos de lectura

avatar de usuario
usuario852610

En PHP podemos verificar si existe una clave en una matriz usando la función array_key_exists().

En el lenguaje de plantillas Twig podemos verificar si una variable o propiedad de un objeto existe simplemente usando un if declaración, así:

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

Pero, ¿cómo comprobamos si una clave de un formación existe usando Twig? Lo intenté {% if array.key %}pero me da un error:

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

Como una de las formas principales de pasar datos a una plantilla es usar matrices, parece que debería haber alguna forma de hacerlo. ¿Alguna idea?

  • Twig es solo un motor de plantillas. ¿Lo sabes verdad?

    – itachi

    28 de noviembre de 2012 a las 14:28

  • Puede usar la función “atributo”: ramita.sensiolabs.org/doc/functions/attribute.html {% si el atributo (matriz, clave) está definido %} // hacer algo {% endif %}

    – Dennais

    13 de marzo de 2015 a las 14:47


  • @Vega Debería agregar eso como respuesta, ya que parece ser la única forma de buscar una clave que no sea una sola palabra, como data-value.

    – insertar nombre de usuario aquí

    26 de octubre de 2015 a las 10:09

Ejemplo de ramita:

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

  • ¿Por qué no podemos simplemente usar {% if array.key %}? ¿Qué tiene de malo? ¡En JS es una declaración perfectamente válida pero no en Twig!

    – dVafecto

    11 de febrero de 2016 a las 18:49

  • {% if array.key %} es válido, pero es la sintaxis para verificar si la clave de matriz está vacía. twig.sensiolabs.org/doc/tags/if.html#if

    – array-pop-tartas

    28 de agosto de 2016 a las 5:02

  • Si la clave es una variable, debe usar {% if array[ key ] %} o {% if array[ key ] is defined %}. array.key intenta acceder al índice ‘clave’ en la matriz.

    – MarthyM

    1 de diciembre de 2016 a las 8:36

Puedes usar el keys función ramita

{% if myVar in someOtherArray|keys %}

  • ¡Esto hizo el trabajo por mí, ty!

    –Marky

    18 mayo 2017 a las 16:00

  • Esto es malo si se usa en un ciclo… Hay respuestas mucho mejores, como usar ‘está definido’… por ejemplo, {% si algunaOtraArray[myVar] se define %}

    –Steve Childs

    8 de marzo de 2018 a las 11:16

  • Esto funciona mejor en los casos en que las claves no son aptas para máquinas. Por ejemplo, matriz[‘not-friendly’]

    – negro quemado

    29 de octubre de 2019 a las 12:07

  • Si está utilizando un nombre de clave dinámica, esta respuesta es la mejor.

    – maverabil

    19 de julio de 2021 a las 13:12

avatar de usuario
dreftymac

Respuesta rápida (TL; DR)

  • DeveloperTLindel quiere probar la existencia de una clave de matriz en Twig.
  • DeveloperTLindel quiere atrapar cualquier error asociado con la clave no definida.
  • Esto se puede manejar usando el default filtrar.

Respuesta detallada

Contexto

  • Twig 2.x (última versión a partir del miércoles 2017-03-08)
  • Uso general de la default filtrar.

Problema

  • Guión:
  • DeveloperTLindel quiere probar la existencia de una clave de matriz en Twig.
  • DeveloperTLindel quiere evitar errores o excepciones causados ​​por una clave potencialmente indefinida.

Solución

  • DeveloperTLindel puede usar el default filtrar.
  • los default El filtro detecta cualquier excepción debido a una variable indefinida y permite la sustitución de cortocircuito de un valor alternativo.
  • los default el filtro es encadenable.

Ejemplo01


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

Ver también

  • SO: pregunta similar relacionada con variables inexistentes o nulas
  • SO: uso general del filtro predeterminado

¿Ha sido útil esta solución?