Twig 1.12 se presenta con grandes novedades
Twig, el mejor sistema de plantillas para PHP, tiene un ritmo de desarrollo tan intenso que es prácticamente imposible seguir su evolución de manera actualizada. Afortunadamente, las versiones que se publican suelen contener un número limitado de mejoras y todas son retrocompatibles.
No obstante, la nueva versión 1.12 que se ha publicado hoy incluye un montón de mejoras interesantes. Estas son las principales:
1. Las funciones propias de Twig ahora son más fáciles de definir:
Hasta ahora tenías que crear unas clases raras de tipo Twig_Function_Method
o Twig_Function_Function
y añadir en ellas el código de la función. Algo así:
$twig->addFunction('mi_funcion', new Twig_Function_Method($extension, 'someMethod'));
Ahora puedes llamar directamente a cualquier método de cualquier clase PHP desde el mismo punto en el que registras la función:
$twig->addFunction(new Twig_SimpleFunction('mi_funcion', array($extension, 'someMethod')));
Además, si la función es pequeña puedes incluso escribir el código al registrar la función:
$twig->addFunction(new Twig_SimpleFunction('mi_funcion', function () { /* código PHP */ }));
Este cambio solo afecta a las funciones y por tanto, no puedes aplicarlo a los filtros. Tampoco está claro cómo aprovechar todo esto en Symfony2.
2. Las macro por fin pueden definir valores por defecto para sus parámetros:
Hasta ahora el siguiente código era erróneo, ya que el valor por defecto de los parámetros había que definirlo con el filtro default()
dentro del propio código de la macro:
{% macro input(name, value = "", type = "text", size = 20) %} <input type="{{ type }}" name="{{ name }}" value="{{ value|e }}" size="{{ size }}" /> {% endmacro %}
3. Las funciones y filtros soportan argumentos con nombre:
Hasta ahora Twig se comportaba como PHP y obligaba a indicar todos los parámetros secuencialmente en la llamada a la función o al filtro:
{{ data|convert_encoding('UTF-8', 'iso-2022-jp') }}
Lo peor es que cuando quieres cambiar el segundo argumento pero no el primero, tienes que indicar obligatoriamente también ese primer argumento. Esto sucede cuando quieres cambiar la zona horaria pero no el formato de una fecha:
{{ "now"|date(null, "Europe/Madrid") }}
Gracias a los argumentos con nombre, ahora puedes pasar los argumentos que quieras y en el orden que prefieras, ya que cada uno tiene su nombre y Twig puede interpretarlos siempre correctamente. Los siguientes ejemplos son equivalentes a los anteriores:
{{ data|convert_encoding(from='iso-2022-jp', to='UTF-8') }} {{ "now"|date(timezone="Europe/Madrid") }}
Los argumentos con nombre es uno de los viejos anhelos de los programadores avanzados de PHP, para poder igualarse con lenguajes de programación como Python. Así que este es otro ejemplo en el que Twig mejora incluso al propio PHP.
El nombre de los argumentos lo puedes encontrar en la página de ayuda de cada función/filtro en el manual oficial de Twig.
4. Se ha definido la función include():
Su comportamiento es igual que el de la etiqueta {% include %}
, salvo que la función include()
devuelve el resultado de renderizar ese fragmento de plantilla, en vez de incluirlo directamente:
{# se incluye el fragmento de la plantilla #} {% include "listado.html.twig" %} {# se renderiza el fragmento, pero se guarda en una variable y no se muestra #} {% set contenido = include("listado.html.twig") %} {# código equivalente al primer ejemplo #} {{ include("listado.html.twig") }}
5. Se han mejorado las posibilidades del operador ternario:
Hasta ahora este operador solo soportaba el siguiente comportamiento:
{{ usuario.esPremium ? "Gastos de envío gratis" : "10 euros de gatos de envío" }}
Ahora soporta la sintaxis corta de PHP:
{{ variable ?: 'valor' }} es equivalente a {{ variable ? variable : valor }}
También soporta otra sintaxis todavía más concisa:
{{ variable ? valor }} es equivalente a {{ variable ? valor : '' }}
Fuente: Twig 1.12.0-RC1 released
Comentarios
-
#1
Muy buena información, gracias por compartir
Este artículo ya no permite añadir más comentarios.
¿Por qué? Los artículos cierran sus comentarios automáticamente
unos meses después de su publicación para asegurar que estos sigan
siendo relevantes.
Proyectos Symfony destacados
La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.