【问题标题】:Step by Step Guide to Enabling Twig Debug dump() in Symfony在 Symfony 中启用 Twig Debug dump() 的分步指南
【发布时间】:2014-10-01 01:02:58
【问题描述】:

目标

最大的目标是打印出 twig 表单模板 /views/Form/fields.html.twig 中可用的变量,以便我可以找出哪些变量可用,特别是在{% 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。

【问题讨论】:

  • 检查此问题中接受的答案:Link
  • @waldek_c 感谢您的链接。这些答案都不起作用,但在此过程中我以某种方式修复了它(请参阅下面的答案)。
  • 然而,更大的问题仍然存在,你不能dump(_context) 以白页告终。也许当您转储递归对象时会发生这种情况?所以我不知道如何实际查看 twig 中可用的所有变量......回到第一格。

标签: symfony twig


【解决方案1】:

我在其他帖子中看到的所有建议似乎都是针对旧版本的 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.加载内核并打开调试。 确保内核加载时在开发模式下打开调试,默认情况下这将在您的 app_dev.php 文件中(加载以访问您的开发模式的索引文件)。

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

5.检查配置。确保基于内核调试模式启用了twig调试,编辑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 %}

【讨论】:

  • 但这仍然不允许我转储大多数变量,即如果它们是一个对象(大概)。在大多数情况下,这就是我首先需要进行转储的原因。但是这个转储功能只是让整个页面变白而没有任何错误(其他人说这可能是内存泄漏)。
  • > 其他人说这可能是内存泄漏我就是这样!
【解决方案2】:

如果您尝试在 prod env 上启用它。

您应该在 app/AppKernel.php 中添加以下内容;

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

和 在 app/config.yml 编辑这一行;

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

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

【讨论】:

    猜你喜欢
    • 2013-12-31
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 2015-08-10
    • 2012-12-15
    • 2012-07-24
    • 1970-01-01
    相关资源
    最近更新 更多