如何在树枝模板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:
-  在app/config/config.yml设置twig: debug: 1
- 
将此添加到config_dev.yml services: debug.twig.extension: class: Twig_Extensions_Extension_Debug tags: [{ name: 'twig.extension' }]
- 
sudo rm -fr app/cache/dev
-  为了使用我自己的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()