Pregunta

Ver el patrón de capa donde solo presenta lo que le han dado está bien y todo, pero ¿cómo sabe lo que está disponible? ¿Hay una funcionalidad de "Lista de todas las variables definidas" en la ramita? ¿Hay alguna forma de descargar una variable?

La solución que encontré al buscarla fue definir una función en la que pueda usar mi Herramientas de depuración de PHP existentes por inyectar una función, pero todas las referencias que he encontrado incluyen estas dos bonitas líneas de código, pero en ninguna parte se especifica dónde colocarlas. Pasando por el hecho de que necesitan un $ cargador Variable definida, probé /app/config/autoload.php, pero el $ cargador allí era el tipo incorrecto. ¿Dónde coloco el código PHP para agregar una función de ramita?

¿Fue útil?

Solución

A partir de la ramita 1.5, la respuesta correcta es usar la función de volcado. Está completamente documentado en la documentación de la ramita. Aquí está la documentación para habilitar este interior Symfony2.

{{ dump(user) }}

Otros consejos

Puedes usar el debug etiqueta, que está documentada aquí.

{% debug expression.varname %}

EDITAR: A partir de la ramita 1.5, esto ha sido desaprobado y reemplazado por el nuevo dump función (tenga en cuenta que ahora es una función y ya no es una etiqueta). Ver también: La respuesta aceptada anterior.

Así que lo hice funcionar, en parte un poco hackish:

  1. Establecer twig: debug: 1 en app/config/config.yml
  2. Agregue esto a config_dev.yml

    services:
        debug.twig.extension:
            class: Twig_Extensions_Extension_Debug
            tags: [{ name: 'twig.extension' }]
    
  3. sudo rm -fr app/cache/dev

  4. 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 cambiado print_r( a d(

PD. Todavía me gustaría saber cómo/dónde tomar el entorno $ Twig para agregar filtros y extensiones.

Si está utilizando Twig en su aplicación como un componente Puedes hacerlo:

$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 }}

Si está utilizando Twig como un componente independiente, aquí hay algún ejemplo de cómo habilitar la depuración, ya que es poco probable que el volcado (variable) la función funcionará directamente fuera de la caja

Ser único

Esto se encontró 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'
));

Volcar 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 %}

Puede usar mi complemento que lo hará por usted (un formatear bien la salida):

Barra de volcado

{{ dump() }} no funciona para mí. PHP ahogados. Nivel de anidación demasiado profundo, supongo.

Todo lo que realmente necesitas debug Plantillas de ramas si estás usando un debugger es una extensión como este.

Entonces es solo cuestión de establecer un punto de interrupción y llamar {{ inspect() }} donde lo necesite. Obtienes la misma información que con {{ dump() }} Pero en tu depurador.

Dado que Symfony> = 2.6, hay un buen Fusil componente, pero no es utilizado por Twig's dump() función.

Para sobrescribirlo, podemos crear una extensión:

En la siguiente implementación, no olvide 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 instancias de la ramita, 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 la depuración de las plantillas de ramas, puede usar el declaración de depuración.

enter image description here

Allí puede establecer la configuración de depuración explícitamente.

Puedes editar

/vendor/twig/twig/lib/Twig/Extension/Debug.php

y cambio the var_dump() funciones a \Doctrine\Common\Util\Debug::dump()

Como a la mayoría de los buenos programadores de PHP les gusta usar XDEBUG para realizar el cambio de código y ver las variables en tiempo real, usando dump() Se siente como un paso atrás a los viejos tiempos.

Es por eso que hice una extensión de depuración de ramas y la puse en GitHub.

https://github.com/delboy1978uk/twig-débug

composer require delboy1978uk/twig-debug

Luego agregue la extensión. Si no está usando Symfony, así:

<?php

use Del\Twig\DebugExtension;

/** @var $twig Twig_Environment */
$twig->addExtension(new DebugExtension());

Si lo está, así en sus servicios Yaml Config:

twig_debugger:
    class: Del\Twig\DebugExtension
    tags:
        - { name: twig.extension }

Una vez registrado, ahora puede hacer esto en cualquier lugar de una plantilla de ramita:

{{ breakpoint() }}

Ahora, puede usar xdebug, la ejecución se detendrá y puede ver todas las propiedades del contexto y el entorno.

¡Que te diviertas! :-D

puedes usar vertedero función e imprimo así

{{ dump(MyVar) }}

Pero también hay algo bueno, si no establece ningún argumento para volcar la función, se imprimirá Todas las variables están disponibles, me gusta

{{ dump() }}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top