SymfonyCon, la conferencia más grande del mundo sobre Symfony, se celebra este año en Madrid del 27 al 29 de Noviembre. Compra tu entrada

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

    German Bortoli el 15 de enero de 2013 18:15:52

Publicada el

8 de enero de 2013

Etiquetas

Síguenos en Twitter para acceder a más noticias.