Как переменные var_dump в шаблонах twig?

Просмотр шаблона слоя, в котором вы представляете только то, что вам дано, прекрасно и все, но как вы знаете, что доступно? Есть ли в TWIG функциональность "список всех определенных переменных"? Есть ли способ сбросить переменную?

Решение, которое я нашел путем поиска, состояло в том, чтобы определить функцию, где я могу использовать существующие инструменты отладки php вводя функцию, но все ссылки, которые я нашел, включают эти красивые две строки кода, но нигде не указано, где их разместить. Исходя из того, что им нужна переменная $loader, я попытался /app/config/autoload.php, но загрузчик $был неправильным. Где я могу поместить php-код для добавления функции твига?

Ответ 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() }}