在Symfony中启用Twig Debug dump()的分步指南

时间:2014-10-01 01:02:59

标签: symfony twig

目标

最大的目标是打印出树枝形式模板/views/Form/fields.html.twig中可用的变量,这样我就可以找到可用的WHICH变量,特别是在{% block widget_attributes %}基于字段类型(据说存在但由于某种原因无法访问,并且警告other suggestions以获取该类型。)

我只想查看所有可用的变量......以及它们所持有的值。容易,对吧?

丢失

因此,这导致了很多兔子漏洞,一些有用的文章指出了如何循环当前环境的变量:

{% block widget_attributes %}
    <ol>
        {% for key, value in _context %}
            <li>{{ key }} :
                {% if value is not iterable%}
                    {{ value }}
                {% else %}
                    {{ dump(value) }}
                {% endif %}
            </li>
        {% endfor %}
    </ol>
    {% set attr = attr|merge({'class': (attr.class|default('') ~ ' form-control')|trim}) %}

    {{ parent() }}
{% endblock widget_attributes %}

但是这并没有打印出type,如果它不可迭代,它实际上并没有转储该值。它会毫无错误地杀死symfony。因此,出于多种原因,调试工作至关重要。

启用转储

启用转储的所有建议都不起作用。 Twig's website特别没有用,因为它没有提供上下文如何或在何处加载$ twig = new Twig_Environment(以及最新版本的最新版本是twig的1.5,但在symfony中是1.16?)。 Symfony说这将是enabled by default。但它不起作用。

app.php(加载内核已启用调试):

$kernel = new AppKernel('dev', true);

这是我的config.yml中的内容:

twig:
    debug:            "%kernel.debug%"
    strict_variables: "%kernel.debug%"

在config_dev.yml中启用的other suggestions不会起作用:

imports:
    - { resource: config.yml }

# this is from one of the suggestions, but it doesn't work and may be an older method
services:
    twig.extension.debug:
        class: Twig_Extension_Debug
        tags: [{ name: 'twig.extension' }]

仍然失去

因此,在Symfony中有这么多东西,它功能强大且非常棒,直到它不起作用,然后就没有关于如何使其工作的文档。任何帮助将不胜感激。

我正在运行Symfony 2.5,其作曲家更新为Twig 1.16。

2 个答案:

答案 0 :(得分:2)

我在其他帖子中看到的所有建议似乎都是针对较旧版本的Symfony而且它们对我不起作用。但是Twig debugging is enabled by default in Symfony现在。所以这就是我为解决问题所做的工作:

<强> 1。升级到Symfony 2.5。编辑/composer.json文件并更新symfony版本。

<强> 2。更新所需的依赖项。在命令行上运行composer update

第3。更新Twig。这也自动将twig更新为1.16(Symfony需要最低版本,因此如果你的项目需要Twig的最新版本1.5,你需要在我们自己的composer.json文件中要求。

<强> 4。使用Debug On加载内核。确保在Dev模式下启用内核加载调试,默认情况下,这将在app_dev.php文件中(加载索引文件以访问您的开发模式)。

$kernel = new AppKernel('dev', true);

<强> 5。检查配置。确保基于内核调试模式启用了twig debug,编辑config.yml:

twig:
    debug:            "%kernel.debug%"
    strict_variables: "%kernel.debug%"

<强> 6。检查Dev Config。确保你的config_dev.yml导入config.yml(或者至少有上面的相关配置)。

imports:
    - { resource: config.yml }

执行此操作后,转储功能现在可以在Twig中使用:

{% block widget_attributes %}
    {{ dump(attr) }}
    {% set attr = attr|merge({'class': (attr.class|default('') ~ ' form-control')|trim}) %}
    {{ parent() }}
{% endblock widget_attributes %}

答案 1 :(得分:1)

如果您尝试在产品环境中启用它。

您应将以下内容添加到app / AppKernel.php;

$bundles[] = new \Symfony\Bundle\DebugBundle\DebugBundle();

和 在app / config.yml中 编辑此行;

twig:
debug:            %kernel.debug% ========> sure this set true
strict_variables: %kernel.debug%

但是请记住,如果您在实时服务器中的项目在以下方面可能是不安全的: 泄漏调试信息