165 votes

Comment utiliser les variables var_dump dans les modèles twig ?

Le modèle de couche de vue où vous ne présentez que ce qui vous a été donné est très bien et tout, mais comment savez-vous ce qui est disponible ? Existe-t-il une fonctionnalité "liste de toutes les variables définies" dans TWIG ? Existe-t-il un moyen de vider une variable ?

La solution que j'ai trouvée en la cherchant a été de définir une fonction où je peux utiliser mon outils de débogage php existants por injecter une fonction mais toutes les références que j'ai trouvées à ce sujet incluent ces deux belles lignes de code, mais il n'est spécifié nulle part où les placer. Si l'on en croit le fait qu'elles ont besoin d'un $loader défini, j'ai essayé /app/config/autoload.php mais le $loader n'était pas le bon. Où dois-je placer le code php pour ajouter une fonction twig ?

262voto

Icode4food Points 3318

À partir de Twig 1.5, la réponse correcte est d'utiliser la fonction dump. Il est entièrement documenté dans la documentation de Twig. . Voici la documentation pour activer ceci dans Symfony2.

{{ dump(user) }}

3 votes

BTW, soyez prudent lorsque vous déchargez des objets avec un mapping relationnel.

15 votes

Quand j'utilise {{ dump() }} pour vider toutes les variables, il renvoie une page blanche. Existe-t-il un autre moyen de vider une variable ?

0 votes

J'utilise la dernière version de Symfony 2.5, et j'ai configuré les fichiers config.yml et config_dev.yml et activé le mode débogage lors du chargement du noyau pour l'environnement de développement. J'ai essayé les autres méthodes manuelles mentionnées par Morland ci-dessous. Dans tous les cas, j'obtiens également une page blanche lorsque dump est utilisé. Et pas de dump.

29voto

igorw Points 12642

Vous pouvez utiliser le debug qui est documenté aquí .

{% debug expression.varname %}

Edit : Depuis la version 1.5 de Twig, cette fonction a été supprimée et remplacée par la nouvelle fonction dump (attention, il s'agit maintenant d'une fonction et non plus d'une balise). Voir aussi : La réponse acceptée ci-dessus.

7 votes

Si vous obtenez une erreur disant Unknown tag name "debug" pour étendre votre configuration (soit dans l'interface globale config.yml o config_dev.yml ) comme décrit ici : github.com/symfony/symfony-docs/issues/455#issuecomment-1884861

5 votes

Cette méthode est obsolète depuis la version 1.5 de Twig.

4 votes

Ajout d'une note de dépréciation à la réponse.

17voto

Alexander Morland Points 3013

J'ai réussi à le faire fonctionner, mais c'est un peu compliqué :

  1. Définir twig: debug: 1 sur 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 a changé print_r( a d(

PS. J'aimerais quand même savoir comment/où récupérer l'environnement $twig pour ajouter des filtres et des extensions.

1 votes

Btw : pour vider le cache, vous pouvez utiliser l'outil de la console ( stackoverflow.com/questions/6789950/ )

0 votes

Y a-t-il un avantage à faire cela ?

0 votes

C'est plus simple ... si vous ne connaissez pas l'outil console, je vous recommande d'y jeter un œil

15voto

Julio Montoya Points 418

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

0 votes

Où les placer/remplacer $twig = new Twig_Environment($loader, array(... ?

3voto

ChristianF Points 41

{{ dump() }} ne fonctionne pas pour moi. PHP des étouffoirs. Le niveau de nidification est trop profond, je suppose.

Tout ce dont vous avez besoin pour debug Les modèles Twig si vous utilisez une debugger est une extension comme este .

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X