如何在twig模板中使用var_dump变量?

Ale*_*and 155 debugging twig

查看图层模式,您只显示您所提供的内容,并且全部,但您如何知道可用的内容?TWIG中是否有"列出所有定义的变量"功能?有没有办法转储变量?

我通过搜索找到的解决方案是定义一个函数,我可以通过注入一个函数来使用我现有的php调试工具,但是我发现的所有引用都包含了这两行很好的代码,但是没有指定的地方在哪里放置它们.由于他们需要定义$ loader变量这一事实,我尝试了/app/config/autoload.php,但是那个$ loader是错误的.我在哪里放置PHP代码来添加树枝功能?

Ico*_*ood 249

从Twig 1.5开始,正确的答案是使用转储功能.它在Twig文档中有完整记录.这是在Symfony2中启用此功能的文档.

{{ dump(user) }}
Run Code Online (Sandbox Code Playgroud)

  • 当我使用`{{dump()}}`转储所有变量时,它返回一个空白页面.有没有其他方法来转储变量? (14认同)
  • 顺便说一句,在转储具有关系映射的对象时要小心 (3认同)
  • 我收到以下错误:` Twig_Error_Syntax - 未知的“转储”函数` (2认同)
  • 此链接描述了从 twig 查找完整数据层的更好方法:[how-to-retrieve-all-variables-from-a-twig-template](/sf/ 12799094/how-to-retrieve-all-variables-from-a-twig-template)对我有用的响应是 `<script>console.log({{ _context | json_encode | raw }});</script> `。希望这可以帮助 (2认同)

igo*_*orw 28

您可以使用此处debug记录的标记.

{% debug expression.varname %}
Run Code Online (Sandbox Code Playgroud)

编辑:从Twig 1.5开始,这已被弃用并被新dump功能所取代(注意,它现在是一个功能,不再是标签).另见:上面接受的答案.

  • 如果你得到一个错误,说"未知的标签名称"调试"`,扩展你的配置(在全局`config.yml`或`config_dev.yml`中),如下所述:https://github.com/symfony/symfony -docs /问题/ 455#issuecomment-1884861 (7认同)
  • 从Twig 1.5开始,不推荐使用此方法. (5认同)
  • 在答案中添加了弃用说明. (4认同)

Ale*_*and 17

所以我让它工作,部分有点hackish:

  1. 设置twig: debug: 1app/config/config.yml
  2. 将其添加到config_dev.yml

    services:
        debug.twig.extension:
            class: Twig_Extensions_Extension_Debug
            tags: [{ name: 'twig.extension' }]
    
    Run Code Online (Sandbox Code Playgroud)
  3. sudo rm -fr app/cache/dev

  4. 要使用我自己的调试功能而不是print_r(),我打开vendor/twig-extensions/lib/Twig/Extensions/Node/Debug.php并更改print_r(d(

PS.我仍然想知道如何/在哪里获取$ twig环境来添加过滤器和扩展.

  • 您不必设置`twig:debug:1`,因为它从前端控制器的环境继承了这些信息.否则,您最终可能无法在prod环境中输出调试信息.只要您在开发环境中工作,它就会默认启用,并且在您的prod环境中被禁用. (3认同)

red*_*hka 15

如果您处于无法使用该dump功能的环境中(例如:opencart),您可以尝试:

{{ my_variable | json_encode(constant('JSON_PRETTY_PRINT')) }}
Run Code Online (Sandbox Code Playgroud)


Jul*_*lio 13

如果您在应用程序中使用Twig作为组件,则可以执行以下操作:

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

$twig->addFilter('var_dump', new Twig_Filter_Function('var_dump'));
Run Code Online (Sandbox Code Playgroud)

然后在你的模板中:

{{ my_variable | var_dump }}
Run Code Online (Sandbox Code Playgroud)


Car*_*ton 6

如果您使用Twig作为独立组件,这里是一些如何启用调试的示例,因为dump(变量)函数不太可能直接开箱即用

独立

这是在icode4food提供的链接上找到的

$twig = new Twig_Environment($loader, array(
    'debug' => true,
    // ...
));
$twig->addExtension(new Twig_Extension_Debug());
Run Code Online (Sandbox Code Playgroud)

燧石

$app->register(new \Silex\Provider\TwigServiceProvider(), array(
    'debug' => true,
    'twig.path' => __DIR__.'/views'
));
Run Code Online (Sandbox Code Playgroud)


kap*_*lny 5

转储所有自定义变量:

<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 %}
Run Code Online (Sandbox Code Playgroud)

您可以使用我的插件为您做到这一点(可以很好地格式化输出):

树枝转储酒吧