Detección y verificación de variables en plantillas Twig
Al trabajar con un archivo de plantilla Twig, la mayoría de las variables están documentadas en los comentarios del archivo de plantilla. Sin embargo, cuando no es así, o cuando temas o módulos introducen nuevas variables, necesitamos una forma de descubrir todas las variables disponibles dentro de la plantilla. Twig proporciona la función dump() para descubrir y verificar variables en archivos de plantilla.
La función dump() no mostrará salida a menos que la depuración esté habilitada. Aprende cómo habilitar la depuración de Twig.
Una vez habilitada, la función dump() puede usarse para mostrar información sobre una variable o variables dentro de la plantilla.
Verificación de una variable
Si tienes una variable title en tu plantilla, lo siguiente imprimirá su contenido en la plantilla:
{{ dump(title) }}
Descubrir todas las variables disponibles en la plantilla
Para mostrar todas las variables disponibles y su contenido en la plantilla, añade lo siguiente (tras habilitar la depuración):
{{ dump() }}
Para mostrar solo las claves de las variables disponibles, usa:
{{ dump(_context|keys) }}
En todas las plantillas Twig están disponibles además estas variables globales:
- _self se refiere a la plantilla actual y contiene información extendida sobre la plantilla, como el nombre de la clase compilada y el entorno Twig. _self está obsoleta y fue removida en Twig versión 2.x.
- _context se refiere al contexto actual y contiene todas las variables pasadas a la plantilla, como las variables enviadas desde theme(), preparadas en preprocess o establecidas en la plantilla. Usar {{ dump() }} sin variable equivale a {{ dump(_context) }}.
- _charset se refiere al conjunto de caracteres actual.
Precaución con dump()
Si quieres ver todas las variables pero dump() provoca agotamiento de memoria debido a recursión o similar, puedes inspeccionar _context para ver todas sus claves:
<ol> {% for key, value in _context %} <li>{{ key }}</li> {% endfor %} </ol>
Luego usa una comprobación condicional (por ejemplo, {% if loop.index == 2 %}) para mostrar solo el valor cuando lo necesites.
Más información
Consulta la documentación de la función dump de Twig para aprender más sobre dump.
Depuración con xdebug
La forma más recomendada de depurar es usar un IDE con el plugin xdebug.
La configuración más sencilla es usar PHPStorm (comercial) y xdebug. Microsoft VSCode es un IDE gratuito y de código abierto con plugins que hacen lo mismo sin que tengas que comprar software comercial.
Usar xdebug te permitirá seguir el proceso, inspeccionar el contenido de variables y hacerlo de forma que evites ciclos infinitos que pueden ocurrir con dump o kint.
Un módulo útil llamado twig_xdebug puede ayudar a mostrar las variables disponibles en xdebug.
Depuración con kint
La función dump() en Twig suele imprimir mucho texto en la página web, lo que dificulta encontrar la aguja en el pajar.
Una alternativa a dump() es kint, una herramienta de depuración para PHP. La función kint() funciona igual que dump() pero ofrece una interfaz expandible y navegable para las variables mostradas.
El proyecto devel provee el módulo devel kint, que permite a desarrolladores usar kint() en lugar de dump().
1. Descarga el módulo devel.
2. Activa el módulo «devel kint».
3. Al igual que dump(), kint() no mostrará salida si no está activada la depuración. Aprende cómo habilitar la depuración Twig.
4. En tus archivos .twig usa kint() para inspeccionar variables, igual que con dump().
5. Opcionalmente, instala y activa el módulo Search Kint para buscar en la lista de variables anidadas.
Método y clase de la política de lista blanca (whitelist)
Al trabajar con objetos, se permite (lista blanca) solo la invocación de ciertos métodos de obtención y establecimiento o acceso a objetos mediante la clase TwigSandboxPolicy. Esto previene llamadas a métodos arbitrarios en tus plantillas. Por ejemplo, {{ node.delete }} en un objeto nodo podría borrar el nodo si no hubiera lista blanca. Puedes extender esta lista blanca agregando en tu archivo settings.php lo siguiente:
$settings['twig_sandbox_whitelisted_methods'] = [ 'id', 'label', 'bundle', 'get', '__toString', 'toString', 'referencedEntities', ];
donde 'referencedEntities' es un método que quieres usar en tu plantilla.