Jak var zrzut zmiennych w szablonach gałązek?

Wzór warstwy widoku, w którym przedstawiasz tylko to, co otrzymałeś, jest w porządku i w ogóle, ale skąd wiesz, co jest dostępne? Czy istnieje funkcja" lista wszystkich zdefiniowanych zmiennych " w gałązce? Czy istnieje sposób na zrzucenie zmiennej?

Rozwiązaniem, które znalazłem szukając, było zdefiniowanie funkcji, w której mogę używać moich istniejących narzędzi debugowania php poprzez wstrzyknięcie funkcji , ale wszystkie odniesienia, które znalazłem, zawierają te ładne dwie linie kod, ale nigdzie nie jest określone, gdzie je umieścić. Idąc przez fakt, że potrzebują zmiennej $loader zdefiniowanej, próbowałem /app/config/autoload.php ale $loader tam był zły rodzaj. Gdzie umieścić kod php do dodania funkcji gałązki?

Author: dreftymac, 2011-09-06

14 answers

Od wersji Twig 1.5 poprawną odpowiedzią jest użycie funkcji zrzutu. Jest to w pełni udokumentowane w dokumentacji Twig. Oto dokumentacja umożliwiająca to wewnątrz Symfony2.

{{ dump(user) }}
 257
Author: Icode4food,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-27 09:13:01

Możesz użyć znacznika debug, który jest udokumentowany tutaj .

{% debug expression.varname %}

Edit: od wersji Twig 1.5 ta funkcja została wycofana i zastąpiona nową funkcją dump (Uwaga, teraz jest to funkcja, a nie znacznik). Zobacz też: akceptowana odpowiedź powyżej.

 29
Author: igorw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-20 21:51:35

Więc mam go działa, częściowo trochę hackish:

  1. Ustaw twig: debug: 1 w app/config/config.yml
  2. Dodaj to do config_dev.yml

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

  4. aby użyć własnej funkcji debugowania zamiast print_r(), otworzyłem vendor/twig-extensions/lib/Twig/Extensions/Node/Debug.php i zmieniłem print_r( na d(

PS. Nadal chciałbym wiedzieć, jak / gdzie pobrać środowisko $twig, aby dodać filtry i rozszerzenia.

 17
Author: Alexander Morland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-22 00:27:47

Jeśli używasz gałązki w swojej aplikacji jako komponentu możesz to zrobić:

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

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

Następnie w szablonach:

{{ my_variable | var_dump }}
 15
Author: Julio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-31 15:03:52

Jeśli jesteś w środowisku, w którym nie możesz użyć funkcji dump (np: opencart), możesz spróbować:

{{ my_variable | json_encode(constant('JSON_PRETTY_PRINT')) }}
 9
Author: redochka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-29 16:59:31

Zrzuć wszystkie zmienne niestandardowe:

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

Możesz użyć mojej wtyczki, która zrobi to za Ciebie (ładnie sformatuje wyjście):

Twig Dump Bar

 6
Author: kapitalny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-05 18:01:18

Jeśli używasz Twig jako samodzielnego komponentu, oto przykład jak włączyć debugowanie, ponieważ jest mało prawdopodobne, że funkcja dump (zmienna) będzie działać od razu po wyjęciu z pudełka

Samodzielny

To zostało znalezione na linku podanym przez 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'
));
 5
Author: Carlton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-06 11:43:02

{{ dump() }} dla mnie to nie działa. Dławiki. Poziom zagnieżdżenia jest chyba zbyt głęboki.

Wszystko, czego naprawdę potrzebujesz, aby debug Szablony gałązek, jeśli używasz debugger, to rozszerzenie jak to .

To tylko kwestia ustawienia punktu przerwania i wywołania {{ inspect() }} gdziekolwiek tego potrzebujesz. Dostajesz te same informacje co w {{ dump() }}, ale w debuggerze.

 3
Author: Christian Fecteau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-03 13:40:57

Ponieważ Symfony > = 2.6, istnieje ładny komponent VarDumper, ale nie jest on używany przez funkcję Twig ' a dump().

Aby go nadpisać, możemy utworzyć rozszerzenie:

W poniższej implementacji nie zapomnij zastąpić przestrzeni nazw.

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
Author: Alain Tiemblo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-20 11:35:47

Pełny przepis tutaj dla szybszego odniesienia (zauważ, że wszystkie kroki są obowiązkowe):

1) Podczas tworzenia instancji gałązki, podaj opcję debugowania

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

2) Dodaj rozszerzenie debugowania

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

3) Użyj go tak, jak zauważył @Hazarapet Tunanyan

{{ dump(MyVar) }}

Lub

{{ dump() }}

Lub

{{ dump(MyObject.MyPropertyName) }}
 3
Author: Tudor Ilisoi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-30 14:57:51

Do debugowania szablonów gałązek można użyć instrukcji debug .

Tutaj wpisz opis obrazka

Tam możesz ustawić ustawienie debug explicitely.

 1
Author: Raffael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-06 10:18:47

Możesz edytować

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

I zmienić the var_dump() funkcje na \Doctrine\Common\Util\Debug::dump()

 1
Author: user3420644,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-31 07:41:26

Jako że większość dobrych programistów PHP lubi używać XDebug, aby przechodzić przez uruchomiony kod i obserwować zmiany zmiennych w czasie rzeczywistym, używanie dump() wydaje się być krokiem wstecz do starych złych czasów.

Dlatego zrobiłem rozszerzenie Twig Debug i umieściłem je na Githubie.

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

composer require delboy1978uk/twig-debug

Następnie dodaj rozszerzenie. Jeśli nie używasz Symfony, w ten sposób:

<?php

use Del\Twig\DebugExtension;

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

Jeśli jesteś, jak to w swoich usługach YAML config:

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

Po zarejestrowaniu, możesz teraz zrobić to w dowolnym miejscu w szablonie gałązki:

{{ breakpoint() }}

Teraz możesz użyć XDebug, wykonanie zatrzyma się i możesz zobaczyć wszystkie właściwości zarówno kontekstu, jak i środowiska.

Baw się dobrze! :- D
 1
Author: delboy1978uk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-05 14:30:05

Możesz użyć funkcji dump i wydrukować ją w ten sposób

{{ dump(MyVar) }}

Ale jest też jedna fajna rzecz, jeśli nie ustawisz żadnego argumentu do funkcji dump, wyświetli wszystkie zmienne są dostępne , Jak

{{ dump() }}
 0
Author: Hazarapet Tunanyan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-28 21:25:47