Как изменить переменные var_dump в шаблонах веточек? - PullRequest
152 голосов
/ 06 сентября 2011

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

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

Ответы [ 13 ]

246 голосов
/ 10 апреля 2012

Начиная с Twig 1.5, правильный ответ - использовать функцию дампа. Это полностью задокументировано в документации Twig . Вот документация для включения этого в Symfony2.

{{ dump(user) }}
27 голосов
/ 06 сентября 2011

Вы можете использовать тег debug, который задокументирован здесь .

{% debug expression.varname %}

Редактировать: Начиная с Twig 1.5, он устарел и заменен новым dump функция (обратите внимание, теперь это функция, а не тег).Смотрите также: принятый ответ выше.

17 голосов
/ 06 сентября 2011

Итак, у меня все получилось, частично немного хакерски:

  1. Установить twig: debug: 1 в app/config/config.yml
  2. Добавить это в config_dev.yml

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

  4. Чтобы использовать собственную функцию отладки вместо print_r(), я открыл vendor/twig-extensions/lib/Twig/Extensions/Node/Debug.php и изменил print_r( на d(

PS.Я все еще хотел бы знать, как / где получить среду $ twig для добавления фильтров и расширений.

13 голосов
/ 03 мая 2012

Если вы используете Twig в своем приложении в качестве компонента , вы можете сделать это:

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

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

Тогда в ваших шаблонах:

{{ my_variable | var_dump }}
6 голосов
/ 06 ноября 2014

Если вы используете Twig в качестве автономного компонента, вот несколько примеров того, как включить отладку, так как маловероятно, что функция dump (переменная) будет работать прямо из коробки

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'
));
4 голосов
/ 05 марта 2016

Дамп всех пользовательских переменных:

<code><h1>Variables passed to the view:</h1>
{% for key, value in _context %}
    {% if key starts with '_' %}
    {% else %}
        <pre style="background: #eee">{{ key }}
{{dump (value)}} {% endif%} {% endfor%}

Вы можете использовать мой плагин, который сделает это за вас (и приятно отформатирует вывод):

Пруток для веток

4 голосов
/ 21 августа 2012

{{ dump() }} не работает для меня. PHP дроссели. Я думаю, уровень вложенности слишком глубокий.

Все, что вам действительно нужно, debug Шаблоны Twig, если вы используете debugger, это расширение типа this .

Тогда вам нужно просто установить точку останова и вызвать {{ inspect() }} там, где вам это нужно. Вы получаете ту же информацию, что и с {{ dump() }}, но в своем отладчике.

3 голосов
/ 20 декабря 2014

Поскольку Symfony> = 2.6, есть хороший компонент VarDumper , но он не используется функцией dump() Twig.

Чтобы перезаписать его, мы можем создать расширение:

В следующей реализации не забудьте заменить пространства имен.

Fuz / AppBundle / Ресурсы / конфигурации / 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';
    }

}
2 голосов
/ 30 ноября 2016

Полный рецепт здесь для быстрого ознакомления (обратите внимание, что все шаги являются обязательными):

1) при создании экземпляра Twig передайте опцию отладки

$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) }}
1 голос
/ 05 июля 2018

Поскольку большинству хороших программистов на 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...