Blog


Nuevas características en Twig

NUEVAS CARACTERÍSTICAS EN TWIG

20 / 06 / 2019 Symfony

Hace unos días se anunciaba que se ha decidido declarar obsoleta la integración del componente Templating y por tanto, declarar también obsoletas las plantillas PHP, en Symfony 4.3. Por tanto, el proyecto Twig, que no para de lanzar nuevas versiones e incorporar nuevas características, será el motor de plantillas que tendremos que usar a partir de Symfony 5.0. 

Una de las nuevas incorporaciones que más nos ha gustado es la del patrón "filter, map and reduce" para transformar colecciones y secuencias de elementos mediante el uso de nuevos filtros filter, map y reduce. A continuación mostramos algunos ejemplos de su uso.

Filter.

El filtro filter podemos usarlo en iteraciones para eliminar aquellos elementos que no cumplan con una expreción dada, pudiendo prescindir de la condición if. Por ejemplo, si quisiéramos mostrar solo los usuarios mayores de edad, en lugar de usar el condicional en el bucle:

{% for usuario in listado_usuarios if usuario.edad >= 18 %}
    {{ usuario.nombre }}
{% endfor %}

Usaríamos el nuevo filtro filter.

{% for usuario in listado_usuarios|filter(usuario => usuario.edad >= 18) %}
    {{ usuario.nombre }}
{% endfor %}

Map.

El filtro map es similar a la función array_map() de PHP, aplica una función a los elementos de una colección.

{% set usuarios = [
    {nombre: "Manolo", apellido: "García"},
    {nombre: "Lucía", apellido: "Pérez"},
] %}

{{ usuarios|map(u => "#{u.nombre} #{u.apellido}")|join(', ') }}

De esta forma, obtendríamos una salida similar a esta:

Manolo García, Lucía Pérez

Reduce.

Por último, el filtro reduce reduce una secuencia, de forma iterativa, a un único valor, utilizando una función de flecha. Por ejemplo, si quisiéramos obtener la cantidad total de productos que tenemos en un carrito de la compra, podríamos utilizar el filtro reduce de la siguiente manera:

{% set num_productos = carrito.items|reduce((total, item) => total + item.unidades) %}
{{ num_productos }} productos.

 



ARTÍCULOS RELACIONADOS