Вопрос

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

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

Это было полезно?

Решение

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

{{ dump(user) }}

Другие советы

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

{% debug expression.varname %}

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

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

  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(

Пса Я все еще хотел бы знать, как/где взять среду $ 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) }}

Для отладки шаблонов ветки вы можете использовать Заявление отладки.

enter image description here

Там вы можете установить настройку отладки явно.

Вы можете редактировать

/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() }}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top