Как переменные VAR_DUMP в шаблонах ветки?
Вопрос
Просмотреть шаблон слоя, где вы представляете только то, что вам дали, хорошо и все, но как вы узнаете, что доступно? Есть ли функциональность «Список всех определенных переменных» в ветке? Есть ли способ сбросить переменную?
Решение, которое я обнаружил, поиск его, было определить функцию, в которой я могу использовать свою Существующие инструменты отладки PHP по инъекция функции, но все ссылки, которые я нашел, включают в себя эти две красивые строки кода, но нигде не указано, где их разместить. Следуя тому факту, что им нужен $ загрузчик Переменная определена, я попробовал/Aapp/config/autoload.php, но $ загрузчик был неправильный вид. Где я могу поместить код PHP для добавления функции Twig?
Решение
По состоянию на веток 1.5 правильный ответ - использовать функцию дампа. Он полностью задокументирован в документации Twig. Вот документация, чтобы включить это внутри Symfony2.
{{ dump(user) }}
Другие советы
Вы можете использовать debug
тег, который задокументирован здесь.
{% debug expression.varname %}
Редактировать: начиная с Twig 1.5, это было устарело и заменено новым dump
Функция (обратите внимание, теперь это функция, а больше не тег). Смотрите также: принятый ответ выше.
Итак, я получил это работа, частично немного хакерского:
- Установлен
twig: debug: 1
вapp/config/config.yml
Добавьте это в config_dev.yml
services: debug.twig.extension: class: Twig_Extensions_Extension_Debug tags: [{ name: 'twig.extension' }]
sudo rm -fr app/cache/dev
- Использовать мою собственную функцию отладки вместо
print_r()
, Я открылvendor/twig-extensions/lib/Twig/Extensions/Node/Debug.php
и изменилсяprint_r(
кd(
Пса Я все еще хотел бы знать, как/где взять среду $ Twig, чтобы добавить фильтры и расширения.
Если вы используете Twig в своем приложении в качестве составная часть ты можешь это сделать:
$twig = new Twig_Environment($loader, array(
'autoescape' => false
));
$twig->addFilter('var_dump', new Twig_Filter_Function('var_dump'));
Затем в ваших шаблонах:
{{ my_variable | var_dump }}
Если вы используете Twig в качестве отдельного компонента, вот какой пример того, как включить отладку, поскольку это маловероятно дамп (переменная) Функция будет работать прямо из коробки
Автономный
Это было найдено на ссылке, предоставленной 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'
));
Сбросьте все пользовательские переменные:
<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 %}
Вы можете использовать мой плагин, который сделает это для вас (и будет хорошо отформатировать вывод):
{{ dump() }}
не работает для меня. PHP
задыхается. Я думаю, уровень гнездования слишком глубоко.
Все, что вам действительно нужно debug
Шаблоны ветки, если вы используете debugger
это расширение как это.
Тогда это просто вопрос установления точки останова и вызова {{ inspect() }}
где бы тебе это нужно. Вы получаете ту же информацию, что и с {{ dump() }}
Но в вашем отладке.
Поскольку Symfony> = 2,6, есть хороший Вардпер компонент, но он не используется Twig's dump()
функция
Чтобы перезаписать это, мы можем создать расширение:
В следующей реализации не забудьте заменить пространства имен.
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/endension/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';
}
}
Полный рецепт здесь для более быстрой ссылки (обратите внимание, что все шаги обязательны):
1) При экземпляре ветки, передайте вариант отладки
$twig = new Twig_Environment(
$loader, ['debug'=>true, 'cache'=>false, /*other options */]
);
2) Добавить расширение отладки
$twig->addExtension(new \Twig_Extension_Debug());
3) Используйте его, как указал @hazarapet Tunanyan
{{ dump(MyVar) }}
или же
{{ dump() }}
или же
{{ dump(MyObject.MyPropertyName) }}
Для отладки шаблонов ветки вы можете использовать Заявление отладки.
Там вы можете установить настройку отладки явно.
Вы можете редактировать
/vendor/twig/twig/lib/Twig/Extension/Debug.php
и изменить the var_dump()
функционирует \Doctrine\Common\Util\Debug::dump()
Поскольку большинство хороших программистов PHP любят использовать XDebug, чтобы фактически пройти через запуск кода и наблюдать переменные, изменяющиеся в режиме реального времени, используя, используя dump()
чувствует себя как шаг назад в плохие старые времена.
Вот почему я сделал расширение отладки Twig и поместил его на GitHub.
https://github.com/delboy1978uk/twig-debug
composer require delboy1978uk/twig-debug
Затем добавьте расширение. Если вы не используете Symfony, например:
<?php
use Del\Twig\DebugExtension;
/** @var $twig Twig_Environment */
$twig->addExtension(new DebugExtension());
Если вы, например, в ваших службах yaml config:
twig_debugger:
class: Del\Twig\DebugExtension
tags:
- { name: twig.extension }
После регистрации вы можете сделать это в любом месте в шаблоне ветки:
{{ breakpoint() }}
Теперь вы можете использовать XDEBUG, выполнение будет пауза, и вы можете увидеть все свойства как контекста, так и окружающей среды.
Веселиться! :-D
вы можете использовать свалка функционируйте и распечатайте это так
{{ dump(MyVar) }}
Но есть и одна хорошая вещь, если вы не установите никаких аргументов для сброса, она будет печатать Все переменные доступны, как
{{ dump() }}