Просмотр шаблона слоя, в котором вы представляете только то, что вам дано, прекрасно и все, но как вы знаете, что доступно? Есть ли в TWIG функциональность "список всех определенных переменных"? Есть ли способ сбросить переменную?
Решение, которое я нашел путем поиска, состояло в том, чтобы определить функцию, где я могу использовать существующие инструменты отладки php вводя функцию, но все ссылки, которые я нашел, включают эти красивые две строки кода, но нигде не указано, где их разместить. Исходя из того, что им нужна переменная $loader, я попытался /app/config/autoload.php, но загрузчик $был неправильным. Где я могу поместить php-код для добавления функции твига?
Ответ 1
Как и Twig 1.5, правильным ответом является использование функции дампа. Он полностью задокументирован в документации Twig. Вот документация, чтобы включить это внутри Symfony2.
{{ dump(user) }}
Ответ 2
Вы можете использовать тег debug
, который документирован здесь.
{% debug expression.varname %}
Изменить: с Twig 1.5 это устарело и заменено новой функцией dump
(обратите внимание, теперь это функция и больше не тег). См. Также: принятый ответ выше.
Ответ 3
Итак, я получил это, частично немного хаки:
- Установите
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(
PS. Мне все равно хотелось бы узнать, как/где взять среду $twig для добавления фильтров и расширений.
Ответ 4
Если вы используете Twig в своем приложении в качестве компонента, вы можете сделать это:
$twig = new Twig_Environment($loader, array(
'autoescape' => false
));
$twig->addFilter('var_dump', new Twig_Filter_Function('var_dump'));
Затем в ваших шаблонах:
{{ my_variable | var_dump }}
Ответ 5
{{ dump() }}
не работает для меня. PHP
дроссели. Уровень вложенности слишком глубокий, я думаю.
Все, что вам действительно нужно debug
Шаблоны Twig, если вы используете debugger
, - это расширение, например this.
Тогда это просто вопрос установки точки останова и вызова {{ inspect() }}
, где вам это нужно. Вы получаете ту же информацию, что и с {{ dump() }}
, но в своем отладчике.
Ответ 6
Если вы используете Twig в качестве отдельного компонента, вот пример того, как включить отладку, поскольку вряд ли функция дампа (переменной) будет работать прямо из коробки
Standalone
Это было найдено по ссылке, предоставленной 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'
));
Ответ 7
Дамп всех пользовательских переменных:
<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 %}
Вы можете использовать мой плагин, который сделает это для вас (это будет удобно форматировать вывод):
Twig Dump Bar
Ответ 8
Поскольку Symfony >= 2.6, есть хороший компонент VarDumper, но он не используется функцией Twig 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/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';
}
}
Ответ 9
Для отладки шаблонов Twig вы можете использовать отладочную инструкцию.
![enter image description here]()
Там вы можете установить настройку отладки явно.
Ответ 10
Полный рецепт здесь для более быстрой ссылки (обратите внимание, что все шаги являются обязательными):
1) при создании экземпляра Twig передайте параметр отладки
$twig = new Twig_Environment(
$loader, ['debug'=>true, 'cache'=>false, /*other options */]
);
2) добавьте расширение отладки
$twig->addExtension(new \Twig_Extension_Debug());
3) Используйте его, как @Хазарапет Тунанян указал
{{ dump(MyVar) }}
или
{{ dump() }}
или
{{ dump(MyObject.MyPropertyName) }}
Ответ 11
Вы можете редактировать
/vendor/twig/twig/lib/Twig/Extension/Debug.php
и измените the var_dump()
на \Doctrine\Common\Util\Debug::dump()
Ответ 12
вы можете использовать функцию dump и напечатать ее следующим образом
{{ dump(MyVar) }}
но есть и одна хорошая вещь, если вы не зададите какой-либо аргумент для функции dump, она напечатает все доступные переменные, например
{{ dump() }}