查看图层模式,其中您只展示您所获得的内容很好而且全部,但您如何知道可用的内容? TWIG中是否有“列出所有定义的变量”功能? 有没有办法转储变量?
我通过搜索找到的解决方案是定义一个函数,我可以使用我的existing php debug tools injecting a function,但我找到的所有引用包括这两行不错的代码,但是无处指定放置它们的位置。由于他们需要定义 $ loader 变量这一事实,我尝试了/app/config/autoload.php,但是$ loader那里有错误的类型。 我在哪里放置用于添加树枝功能的PHP代码?
答案 0 :(得分:246)
从Twig 1.5开始,正确的答案是使用转储功能。 It is fully documented in the Twig documentation。 Here is the documentation to enable this inside Symfony2.
{{ dump(user) }}
答案 1 :(得分:27)
您可以使用debug
标记,记录为here。
{% debug expression.varname %}
编辑:从Twig 1.5开始,这已被弃用并替换为新的dump
函数(注意,它现在是一个函数,不再是标记)。另见:上面接受的答案。
答案 2 :(得分:17)
所以我得到了它的工作,部分有点hackish:
twig: debug: 1
app/config/config.yml
将此添加到config_dev.yml
services:
debug.twig.extension:
class: Twig_Extensions_Extension_Debug
tags: [{ name: 'twig.extension' }]
sudo rm -fr app/cache/dev
print_r()
,我打开了vendor/twig-extensions/lib/Twig/Extensions/Node/Debug.php
并将print_r(
更改为d(
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());
$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 %}
你可以使用我的插件,它会为你做这件事(很好地格式化输出):
答案 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)
答案 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() }}