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
- SO: pregunta similar relacionada con variables nulas o no existentes
- SO: Uso general del filtro predeterminado
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 %}