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

时间:2011-09-06 09:06:54

标签: debugging twig

查看图层模式,其中您只展示您所获得的内容很好而且全部,但您如何知道可用的内容? TWIG中是否有“列出所有定义的变量”功能? 有没有办法转储变量?

我通过搜索找到的解决方案是定义一个函数,我可以使用我的existing php debug tools injecting a function,但我找到的所有引用包括这两行不错的代码,但是无处指定放置它们的位置。由于他们需要定义 $ loader 变量这一事实,我尝试了/app/config/autoload.php,但是$ loader那里有错误的类型。 我在哪里放置用于添加树枝功能的PHP代码?

14 个答案:

答案 0 :(得分:246)

从Twig 1.5开始,正确的答案是使用转储功能。 It is fully documented in the Twig documentationHere is the documentation to enable this inside Symfony2.

{{ dump(user) }}

答案 1 :(得分:27)

您可以使用debug标记,记录为here

{% debug expression.varname %}

编辑:从Twig 1.5开始,这已被弃用并替换为新的dump函数(注意,它现在是一个函数,不再是标记)。另见:上面接受的答案。

答案 2 :(得分:17)

所以我得到了它的工作,部分有点hackish:

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

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

  5. 要使用我自己的调试功能而不是print_r(),我打开了vendor/twig-extensions/lib/Twig/Extensions/Node/Debug.php并将print_r(更改为d(
  6. PS。我仍然想知道如何/在哪里获取$ twig环境来添加过滤器和扩展。

答案 3 :(得分:13)

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

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

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

然后在你的模板中:

{{ my_variable | var_dump }}

答案 4 :(得分:6)

如果您使用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'
));

答案 5 :(得分:6)

如果您所处的环境无法使用dump函数(例如:opencart),则可以尝试:

{{ my_variable | json_encode(constant('JSON_PRETTY_PRINT')) }}

答案 6 :(得分:4)

{{ dump() }}对我不起作用。 PHP窒息。我认为嵌套水平太深了。

如果您使用的是debug,那么您真正需要debugger Twig模板是this的扩展名。

然后,只需设置一个断点并在需要的地方调用{{ inspect() }}即可。您获得与{{ dump() }}相同的信息,但在调试器中。

答案 7 :(得分:4)

转储所有自定义变量:

<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 %}

你可以使用我的插件,它会为你做这件事(很好地格式化输出):

Twig Dump Bar

答案 8 :(得分:3)

由于Symfony&gt; = 2.6,有一个很好的VarDumper组件,但Twig的dump()函数不使用它。

要覆盖它,我们可以创建一个扩展名:

在以下实现中,不要忘记替换名称空间。

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 /枝条/扩展/ 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';
    }

}

答案 9 :(得分:2)

此处提供完整的配方以便更快地参考(请注意,所有步骤都是必需的):

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) }}

答案 10 :(得分:1)

要调试Twig模板,您可以使用debug statement

enter image description here

在那里你可以明确地设置调试设置。

答案 11 :(得分:1)

您可以修改

/vendor/twig/twig/lib/Twig/Extension/Debug.php

并将the var_dump()个功能更改为\Doctrine\Common\Util\Debug::dump()

答案 12 :(得分:1)

由于大多数优秀的PHP程序员喜欢使用XDebug来逐步完成运行代码并实时观察变量的变化,因此使用dump()就像回到了过去的糟糕时光。

这就是为什么我做了一个Twig Debug扩展并将其放在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配置中是这样的:

twig_debugger:
    class: Del\Twig\DebugExtension
    tags:
        - { name: twig.extension }

注册后,您现在可以在树枝模板中的任何位置执行此操作:

{{ breakpoint() }}

现在,您可以使用XDebug,执行将暂停,并且可以看到Context和Environment的所有属性。

玩得开心! :-D

答案 13 :(得分:0)

您可以使用转储功能并按此打印

{{ dump(MyVar) }}

但也有一件好事,如果你没有为dump函数设置任何参数,它会打印所有变量都可用,比如

{{ dump() }}