remove for php arrays twig conditional short-circuiting

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



twig slug (3)

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

En el lenguaje de plantillas de Twig podemos verificar si existe una variable o la propiedad de un objeto simplemente usando una sentencia if , como esta:

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

Pero, ¿cómo comprobamos si existe una clave de una matriz utilizando Twig? {% 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 mediante matrices, parece que debería haber alguna forma de hacerlo. ¿Alguna idea?


Respuesta rápida (TL; DR)

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

Respuesta detallada

Contexto

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

Problema

  • Guión:
  • DeveloperTLindel quiere probar la existencia de una clave de matriz en Twig.
  • DeveloperTLindel desea evitar cualquier error o excepción causada por una clave potencialmente indefinida.

Solución

  • DeveloperTLindel puede usar el filtro default .
  • El filtro default detecta cualquier excepción debida a una variable indefinida y permite la subestación de cortocircuito de un valor alternativo.
  • El filtro default es chainable.

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

Ver también


Ejemplo de ramita:

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


Puedes usar las keys función de ramita.

{% if myVar in someOtherArray|keys %}