如何在树枝模板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,这已被弃用,并取代新的dump
function(注意,它现在是一个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()