web-dev-qa-db-fra.com

Comment var_dump les variables dans les modèles de brindilles?

Voir le modèle de couche où vous ne présentez que ce qui vous a été donné va bien, mais comment savoir ce qui est disponible? Existe-t-il une fonctionnalité "lister toutes les variables définies" dans TWIG? Y a-t-il un moyen de vider une variable?

La solution que j’ai trouvée en cherchant était de définir une fonction permettant d’utiliser mes outils de débogage php existants de en injectant une fonction , mais toutes les références que j’ai trouvées qui incluent ces deux lignes de code de Nice , mais il n’est spécifié nulle part où les placer. S'appuyant sur le fait qu'ils ont besoin d'une variable $ loader définie, j'ai essayé /app/config/autoload.php mais le $ loader était mal choisi. _ {Où est-ce que je place le code php pour ajouter une fonction de brindille?} _

145
Alexander Morland

A partir de Twig 1.5, la bonne réponse consiste à utiliser la fonction dump. Il est entièrement documenté dans la documentation Twig . Voici la documentation pour l'activer dans Symfony2.

{{ dump(user) }}
239
Icode4food

Vous pouvez utiliser la balise debug qui est documentée ici .

{% debug expression.varname %}

Éditer: à partir de Twig 1.5, ceci est obsolète et remplacé par la nouvelle fonction dump (remarque, il s’agit maintenant d’une fonction et non d’une balise). Voir aussi: La réponse acceptée ci-dessus.

27
igorw

Alors je l'ai fait fonctionner, en partie un peu hackish:

  1. Définissez twig: debug: 1 dans app/config/config.yml
  2. Ajoutez ceci à config_dev.yml

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

  4. Pour utiliser ma propre fonction de débogage au lieu de print_r(), j’ai ouvert vendor/twig-extensions/lib/Twig/Extensions/Node/Debug.php et modifié print_r( en d(.

PS. J'aimerais quand même savoir où et comment utiliser l'environnement $ twig pour ajouter des filtres et des extensions.

17
Alexander Morland

Si vous utilisez Twig dans votre application en tant que composant vous pouvez le faire:

$twig = new Twig_Environment($loader, array(
    'autoescape' => false
));

$twig->addFilter('var_dump', new Twig_Filter_Function('var_dump'));

Puis dans vos modèles:

{{ my_variable | var_dump }}
13
Julio

Si vous utilisez Twig en tant que composant autonome, voici quelques exemples sur la façon d'activer le débogage car il est peu probable que la fonction dump (variable) fonctionne immédiatement

Autonome

Cela a été trouvé sur le lien fourni par icode4food

$twig = new Twig_Environment($loader, array(
    'debug' => true,
    // ...
));
$twig->addExtension(new Twig_Extension_Debug());

Silex

$app->register(new \Silex\Provider\TwigServiceProvider(), array(
    'debug' => true,
    'twig.path' => __DIR__.'/views'
));
6
Carlton

{{ dump() }} ne fonctionne pas pour moi. PHP chokes. Niveau de nidification trop profond, je suppose.

Si vous utilisez un debug, tout ce dont vous avez vraiment besoin de debugger Twig templates est une extension comme this .

Ensuite, il suffit de définir un point d'arrêt et d'appeler {{ inspect() }} partout où vous en avez besoin. Vous obtenez les mêmes informations qu'avec {{ dump() }} mais dans votre débogueur.

4
Christian Fecteau

Videz toutes les variables personnalisées:

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

Vous pouvez utiliser mon plugin qui le fera pour vous (et formatera bien la sortie):

Barre de décharge Twig

4
kapitalny

Depuis Symfony> = 2.6, il existe un composant Nice VarDumper , mais il n’est pas utilisé par la fonction dump() de Twig.

Pour l'écraser, nous pouvons créer une extension:

Dans l'implémentation suivante, n'oubliez pas de remplacer les espaces de noms.

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';
    }

}
3
Alain Tiemblo

La recette complète ici pour une référence plus rapide (notez que toutes les étapes sont obligatoires):

1) lors de l’instanciation de Twig, passez l’option de débogage

$twig = new Twig_Environment(
$loader, ['debug'=>true, 'cache'=>false, /*other options */]
);

2) ajouter l'extension de débogage

$twig->addExtension(new \Twig_Extension_Debug());

3) Utilisez-le comme @Hazarapet Tunanyan a souligné

{{ dump(MyVar) }}

ou

{{ dump() }}

ou

{{ dump(MyObject.MyPropertyName) }}
2
Tudor Ilisoi

Pour le débogage des modèles Twig, vous pouvez utiliser l’instruction debug .

enter image description here

Là, vous pouvez définir le paramètre de débogage explicitement.

1
Raffael

Vous pouvez éditer

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

et changez les fonctions the var_dump() en \Doctrine\Common\Util\Debug::dump()

1
user3420644

vous pouvez utiliser dump function et l’imprimer comme ceci

{{ dump(MyVar) }}

mais il y a une bonne chose aussi, si vous ne définissez aucun argument pour dump, il affichera toutes les variables sont disponibles , comme

{{ dump() }}
0
Hazarapet Tunanyan

Comme la plupart des PHP bons programmeurs aiment utiliser XDebug pour parcourir le code en cours d'exécution et voir les variables évoluer en temps réel, utiliser dump() apparaît comme un retour en arrière.

C'est pourquoi j'ai créé une extension Twig Debug et l'ai mise sur Github.

https://github.com/delboy1978uk/twig-debug

composer require delboy1978uk/twig-debug

Ajoutez ensuite l'extension. Si vous n'utilisez pas Symfony, comme ceci:

<?php

use Del\Twig\DebugExtension;

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

Si vous êtes, comme cela dans vos services, config YAML:

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

Une fois inscrit, vous pouvez maintenant le faire n'importe où dans un modèle de brindille:

{{ breakpoint() }}

Maintenant, vous pouvez utiliser XDebug, l'exécution se mettra en pause et vous pourrez voir toutes les propriétés du contexte et de l'environnement.

S'amuser! :-RÉ

0
delboy1978uk