wake-up-neo.com

Wie var_dump Variablen in Zweigvorlagen?

Das Ebenenmuster, in dem Sie nur das präsentieren, was Ihnen gegeben wurde, ist in Ordnung und alles, aber woher wissen Sie, was verfügbar ist? Gibt es in TWIG eine Funktionalität "Alle definierten Variablen auflisten"? Gibt es eine Möglichkeit, eine Variable auszugeben?

Die Lösung, die ich bei der Suche danach gefunden hatte, bestand darin, eine Funktion zu definieren, bei der ich meine vorhandenen PHP-Debug-Tools verwenden kann by eine Funktion einfügen , aber alle Referenzen, die ich dazu gefunden habe, enthalten diese beiden schönen Codezeilen , aber nirgends wird festgelegt, wo sie platziert werden sollen. Ausgehend von der Tatsache, dass sie eine $ loader - Variable definieren müssen, habe ich versucht, /app/config/autoload.php zu verwenden, aber der $ loader dort war der falsche Typ. Wo platziere ich den PHP-Code zum Hinzufügen einer Zweigfunktion?

145

Seit Twig 1.5 ist die korrekte Antwort die Verwendung der Dump-Funktion. Es ist vollständig in der Twig-Dokumentation dokumentiert . Hier ist die Dokumentation, um dies in Symfony2 zu aktivieren.

{{ dump(user) }}
239
Icode4food

Sie können das debug-Tag verwenden, das hier dokumentiert ist.

{% debug expression.varname %}

Bearbeiten: Seit Twig 1.5 wurde dies veraltet und durch die neue dump-Funktion ersetzt (Hinweis, es ist jetzt eine Funktion und kein Tag mehr). Siehe auch: Die oben akzeptierte Antwort.

27
igorw

Also habe ich es zum Laufen gebracht, teilweise ein bisschen hackish:

  1. Setze twig: debug: 1 in app/config/config.yml
  2. Fügen Sie dies zu config_dev.yml hinzu

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

  4. Um meine eigene Debug-Funktion anstelle von print_r() zu verwenden, habe ich vendor/twig-extensions/lib/Twig/Extensions/Node/Debug.php geöffnet und print_r( in d( geändert.

PS. Ich würde gerne noch wissen, wie und wo ich die $ twig-Umgebung dazu nutzen kann, um Filter und Erweiterungen hinzuzufügen.

17

Wenn Sie Twig in Ihrer Anwendung als Komponente verwenden, können Sie Folgendes tun:

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

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

Dann in deinen Vorlagen:

{{ my_variable | var_dump }}
13
Julio

Wenn Sie Twig als eigenständige Komponente verwenden, finden Sie hier ein Beispiel, wie Sie das Debuggen aktivieren können, da es unwahrscheinlich ist, dass die Funktion dump (variable) sofort funktioniert

Eigenständige

Dies wurde auf dem Link von icode4food gefunden

$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() }} funktioniert für mich nicht. PHP Drosseln. Schachtelungsebene zu tief, denke ich.

Alles, was Sie wirklich zu debug Twig-Vorlagen benötigen, wenn Sie eine debugger verwenden, ist eine Erweiterung wie this .

Dann müssen Sie nur einen Haltepunkt setzen und {{ inspect() }} dort aufrufen, wo Sie ihn benötigen. Sie erhalten die gleichen Informationen wie bei {{ dump() }}, aber in Ihrem Debugger.

4

Alle benutzerdefinierten Variablen ausgeben:

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

Sie können mein Plugin verwenden, das wird das für Sie tun (und die Ausgabe schön formatieren):

Twig Dump Bar

4
kapitalny

Seit Symfony> = 2.6 gibt es eine Nice VarDumper - Komponente, die jedoch nicht von Twigs Funktion dump() verwendet wird.

Um es zu überschreiben, können wir eine Erweiterung erstellen:

Vergessen Sie in der folgenden Implementierung nicht, Namespaces zu ersetzen.

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

Das vollständige Rezept hier zum schnelleren Nachschlagen (beachten Sie, dass alle Schritte obligatorisch sind):

1) Wenn Sie Twig instanziieren, übergeben Sie die Debug-Option

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

2) Fügen Sie die Debug-Erweiterung hinzu

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

3) Verwenden Sie es wie @Hazarapet Tunanyan

{{ dump(MyVar) }}

oder

{{ dump() }}

oder

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

Zum Debuggen von Twig-Vorlagen können Sie die Anweisung debug verwenden.

enter image description here

Dort können Sie die Debug-Einstellung explizit setzen.

1
Raffael

Sie können bearbeiten

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

und the var_dump()-Funktionen in \Doctrine\Common\Util\Debug::dump() ändern

1
user3420644

sie können die Funktion dump verwenden und so drucken

{{ dump(MyVar) }}

aber es gibt auch eine nette Sache. Wenn Sie kein Argument für die dump-Funktion setzen, werden alle Variablen ausgegeben, wie

{{ dump() }}
0

Da die meisten guten PHP -Programmierer XDebug gerne verwenden, um tatsächlich Code auszuführen und zu sehen, wie sich Variablen in Echtzeit ändern, ist dump() wie ein Rückschritt in die Vergangenheit.

Deshalb habe ich eine Twig-Debug-Erweiterung erstellt und auf Github gesetzt.

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

composer require delboy1978uk/twig-debug

Fügen Sie dann die Erweiterung hinzu. Wenn Sie Symfony nicht verwenden, wie folgt:

<?php

use Del\Twig\DebugExtension;

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

Wenn Sie in Ihren Diensten so sind, YAML config:

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

Nach der Registrierung können Sie das jetzt überall in einer Zweigvorlage tun:

{{ breakpoint() }}

Jetzt können Sie XDebug verwenden, die Ausführung wird angehalten und Sie können alle Eigenschaften des Context und der Umgebung sehen.

Habe Spaß! :-D

0
delboy1978uk