如何在树枝模板var_dumpvariables?

查看图层模式,只显示给出的内容是好的,但是你怎么知道可用的? 在TWIG中是否有“列出所有已定义variables”的function? 有没有办法转储一个variables?

我通过searchfind的解决scheme是定义一个函数,我可以通过注入一个函数来使用我现有的PHPdebugging工具 ,但是我发现所有引用包括这两行代码,但是没有指定在哪里放置它们。 由于他们需要定义一个$ loadervariables,所以我尝试了/app/config/autoload.php,但是$ loader却是错误的。 我在哪里放置的PHP代码添加一个树枝function?

从Twig 1.5开始,正确的答案是使用dump函数。 它在Twig文档中有完整的logging 。 这里是在Symfony2中启用这个文档。

{{ dump(user) }} 

您可以使用此处logging的debug标记。

 {% debug expression.varname %} 

编辑:作为小枝1.5,这已被弃用,并取代新的dumpfunction(注意,它现在是一个function,不再是一个标签)。 另见:上面接受的答案。

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

  1. app/config/config.yml设置twig: debug: 1
  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. 为了使用我自己的debuggingfunction而不是print_r() ,我打开了vendor/twig-extensions/lib/Twig/Extensions/Node/Debug.php ,并将print_r(更改为d(

PS。 我仍然想知道如何/在哪里抓住$ twig环境来添加filter和扩展。

如果你在应用程序中使用Twig作为组件,你可以这样做:

 $twig = new Twig_Environment($loader, array( 'autoescape' => false )); $twig->addFilter('var_dump', new Twig_Filter_Function('var_dump')); 

然后在你的模板中:

 {{ my_variable | var_dump }} 

{{ dump() }}不适合我。 PHP扼stream器。 嵌套水平太深我猜。

如果你正在使用debugger你真的需要debug Twig模板就像这样 。

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

如果你正在使用Twig作为独立组件,下面是一些关于如何启用debugging的例子,因为它不太可能使dump(variables)函数直接工作

独立

这是在icode4food提供的链接中find的

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

燧石

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

转储所有自定义variables:

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

你可以使用我的插件,这将为你做(一个很好的格式化输出):

枝杈转储酒吧

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

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

在下面的实现中,不要忘记replace名称空间。

FUZ /的appbundle /资源/configuration/ 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'; } } 

为了debuggingTwig模板,您可以使用debugging语句 。

在这里输入图像说明

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

完整的配方在这里更快的参考(请注意,所有的步骤是强制性的):

1)在实例化Twig时,传递debugging选项

 $twig = new Twig_Environment( $loader, ['debug'=>true, 'cache'=>false, /*other options */] ); 

2)添加debugging扩展

 $twig->addExtension(new \Twig_Extension_Debug()); 

3)像@Hazarapet Tunanyan指出的那样使用它

 {{ dump(MyVar) }} 

要么

 {{ dump() }} 

要么

 {{ dump(MyObject.MyPropertyName) }} 

你可以使用转储function,并像这样打印

 {{ dump(MyVar) }} 

但是也有一件好事,如果你不设置任何参数给dump函数,它会打印所有的variables都可用 ,比如

 {{ dump() }} 

你可以编辑

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

并将the var_dump()函数更改为\Doctrine\Common\Util\Debug::dump()