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?} _
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) }}
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.
Alors je l'ai fait fonctionner, en partie un peu hackish:
twig: debug: 1
dans app/config/config.yml
Ajoutez ceci à config_dev.yml
services:
debug.twig.extension:
class: Twig_Extensions_Extension_Debug
tags: [{ name: 'twig.extension' }]
Sudo rm -fr app/cache/dev
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.
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 }}
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
Cela a été trouvé sur le lien fourni par icode4food
$twig = new Twig_Environment($loader, array(
'debug' => true,
// ...
));
$twig->addExtension(new Twig_Extension_Debug());
$app->register(new \Silex\Provider\TwigServiceProvider(), array(
'debug' => true,
'twig.path' => __DIR__.'/views'
));
{{ 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.
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):
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';
}
}
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) }}
Pour le débogage des modèles Twig, vous pouvez utiliser l’instruction debug .
Là, vous pouvez définir le paramètre de débogage explicitement.
Vous pouvez éditer
/vendor/twig/twig/lib/Twig/Extension/Debug.php
et changez les fonctions the var_dump()
en \Doctrine\Common\Util\Debug::dump()
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() }}
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É