debugging - var_dump - twig die
Cómo var_dump variables en plantillas twig? (12)
A partir de Twig 1.5, la respuesta correcta es usar la función de volcado. Está completamente documentado en la documentación de Twig . Aquí está la documentación para habilitar esto dentro de Symfony2.
{{ dump(user) }}
Ver el patrón de capas donde solo presenta lo que se le ha dado está bien y todo, pero ¿cómo sabe qué hay disponible? ¿Existe una funcionalidad de "enumerar todas las variables definidas" en TWIG? ¿Hay alguna manera de volcar una variable?
La solución que encontré al buscarla fue definir una función en la que puedo usar mis herramientas de depuración php existentes mediante la inyección de una función , pero todas las referencias que he encontrado incluyen dos bonitas líneas de código, pero en ninguna parte se especifica dónde colocarlos. Siguiendo el hecho de que necesitan una variable $ loader definida, probé /app/config/autoload.php pero el $ loader era del tipo incorrecto. ¿Dónde coloco el código php para agregar una función twig?
Así que lo hice funcionar, en parte un poco hackish:
- Establecer
twig: debug: 1
enapp/config/config.yml
Agregue esto a config_dev.yml
services: debug.twig.extension: class: Twig_Extensions_Extension_Debug tags: [{ name: ''twig.extension'' }]
sudo rm -fr app/cache/dev
- Para usar mi propia función de depuración en lugar de
print_r()
, abrívendor/twig-extensions/lib/Twig/Extensions/Node/Debug.php
y cambiéprint_r(
ad(
PD. Todavía me gustaría saber cómo / dónde tomar el entorno $ twig para agregar filtros y extensiones.
Desde Symfony> = 2.6, hay un buen componente VarDumper , pero no lo usa la función dump()
Twig.
Para sobrescribirlo, podemos crear una extensión:
En la siguiente implementación, no te olvides de reemplazar los espacios de nombres.
Fuz / AppBundle / Resources / config / services.yml
parameters:
# ...
app.twig.debug_extension.class: Fuz/AppBundle/Twig/Extension/DebugExtension
services:
# ...
app.twig.debug_extension:
class: %app.twig.debug_extension.class%
arguments: []
tags:
- { name: twig.extension }
Fuz / AppBundle / Twig / Extension / DebugExtension.php
<?php
namespace Fuz/AppBundle/Twig/Extension;
class DebugExtension extends /Twig_Extension
{
public function getFunctions()
{
return array (
new /Twig_SimpleFunction(''dump'', array(''Symfony/Component/VarDumper/VarDumper'', ''dump'')),
);
}
public function getName()
{
return ''FuzAppBundle:Debug'';
}
}
La receta completa aquí para una referencia más rápida (tenga en cuenta que todos los pasos son obligatorios):
1) al crear instancias de Twig, pase la opción de depuración
$twig = new Twig_Environment(
$loader, [''debug''=>true, ''cache''=>false, /*other options */]
);
2) agregue la extensión de depuración
$twig->addExtension(new /Twig_Extension_Debug());
3) Úselo como @Hazarapet Tunanyan señaló
{{ dump(MyVar) }}
o
{{ dump() }}
o
{{ dump(MyObject.MyPropertyName) }}
Para depurar plantillas Twig puede usar la here .
Allí puede establecer la configuración de depuración explícitamente.
Puede usar la etiqueta de debug
, que está documentada here .
{% debug expression.varname %}
Editar: a partir de Twig 1.5, esto ha quedado en desuso y reemplazado con la nueva función de dump
(nota, ahora es una función y ya no es una etiqueta). Ver también: la respuesta aceptada arriba.
Puedes editar
/vendor/twig/twig/lib/Twig/Extension/Debug.php
y cambie the var_dump()
funciones the var_dump()
a /Doctrine/Common/Util/Debug::dump()
Si está usando Twig como un componente independiente, aquí hay algunos ejemplos de cómo habilitar la depuración, ya que es poco probable que la función de volcado (variable) salga de la caja.
Ser único
Esto fue encontrado en el enlace proporcionado por icode4food
$twig = new Twig_Environment($loader, array(
''debug'' => true,
// ...
));
$twig->addExtension(new Twig_Extension_Debug());
Sílex
$app->register(new /Silex/Provider/TwigServiceProvider(), array(
''debug'' => true,
''twig.path'' => __DIR__.''/views''
));
Si está usando Twig en su aplicación como componente , puede hacer esto:
$twig = new Twig_Environment($loader, array(
''autoescape'' => false
));
$twig->addFilter(''var_dump'', new Twig_Filter_Function(''var_dump''));
Luego en tus plantillas:
{{ my_variable | var_dump }}
Vuelque todas las variables personalizadas:
<h1>Variables passed to the view:</h1>
{% for key, value in _context %}
{% if key starts with ''_'' %}
{% else %}
<pre style="background: #eee">{{ key }}</pre>
{{ dump(value) }}
{% endif %}
{% endfor %}
Puedes usar mi complemento que hará eso por ti (y formateará bien el resultado):
puedes usar la función de volcado e imprimirlo así
{{ dump(MyVar) }}
pero también hay algo bueno, si no establece ningún argumento para la función de volcado, imprimirá todas las variables disponibles , como
{{ dump() }}
{{ dump() }}
no funciona para mí. Chokes de PHP
Nivel de anidación muy profundo, supongo.
Todo lo que necesitas para debug
plantillas de Twig si estás utilizando un debugger
es una extensión como this .
Entonces solo se trata de establecer un punto de interrupción y llamar a {{ inspect() }}
donde sea que lo necesite. Obtienes la misma información que con {{ dump() }}
pero en tu depurador.