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?
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) }}
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.
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:
- Ustaw
twig: debug: 1
wapp/config/config.yml
-
Dodaj to do config_dev.yml
services: debug.twig.extension: class: Twig_Extensions_Extension_Debug tags: [{ name: 'twig.extension' }]
sudo rm -fr app/cache/dev
- aby użyć własnej funkcji debugowania zamiast
print_r()
, otworzyłemvendor/twig-extensions/lib/Twig/Extensions/Node/Debug.php
i zmieniłemprint_r(
nad(
PS. Nadal chciałbym wiedzieć, jak / gdzie pobrać środowisko $twig, aby dodać filtry i rozszerzenia.
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 }}
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')) }}
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):
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'
));
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.
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';
}
}
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) }}
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 .
Tam możesz ustawić ustawienie debug explicitely.
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()
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! :- DWarning: 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() }}
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