Debugging 如何在细枝模板中转储变量?
视图层模式,您只显示您所得到的是好的和所有的,但您如何知道什么是可用的?TWIG中是否有“列出所有定义的变量”功能?是否有方法转储变量Debugging 如何在细枝模板中转储变量?,debugging,twig,Debugging,Twig,视图层模式,您只显示您所得到的是好的和所有的,但您如何知道什么是可用的?TWIG中是否有“列出所有定义的变量”功能?是否有方法转储变量 我通过搜索找到的解决方案是定义一个可以使用by的函数,但是我找到的所有引用都包含这两行代码,但是没有指定放在哪里。考虑到他们需要定义一个$loader变量,我尝试了/app/config/autoload.php,但那里的$loader类型不正确。用于添加细枝函数的php代码放在哪里?您可以使用debug标记,该标记已记录在案 编辑:从Twig 1.5开始,它已
我通过搜索找到的解决方案是定义一个可以使用by的函数,但是我找到的所有引用都包含这两行代码,但是没有指定放在哪里。考虑到他们需要定义一个$loader变量,我尝试了/app/config/autoload.php,但那里的$loader类型不正确。用于添加细枝函数的php代码放在哪里?您可以使用
debug
标记,该标记已记录在案
编辑:从Twig 1.5开始,它已被弃用并替换为新的
dump
函数(注意,它现在是一个函数,不再是标签)。另请参见:上面接受的答案。有关调试细枝模板的信息,您可以使用
在那里,您可以明确地设置调试设置。所以我让它工作了,部分是有点黑客的:
app/config/config.yml
services:
debug.twig.extension:
class: Twig_Extensions_Extension_Debug
tags: [{ name: 'twig.extension' }]
sudorm-fr应用程序/cache/dev
print\r()
,我打开了vendor/twig extensions/lib/twig/extensions/Node/debug.php
,并将print\r(
更改为d(
另外,我仍然想知道如何/从何处获取$twig环境以添加过滤器和扩展。从twig 1.5开始,正确的答案是使用dump功能
如果您在应用程序中将细枝用作组件,则可以执行以下操作:
$twig = new Twig_Environment($loader, array(
'autoescape' => false
));
$twig->addFilter('var_dump', new Twig_Filter_Function('var_dump'));
然后在模板中:
{{ my_variable | var_dump }}
{{dump()}
不适合我。PHP
阻塞。我想嵌套级别太深了
如果您使用的是调试器
,那么真正需要调试的小树枝模板就是这样的扩展
然后,只需设置断点并在需要时调用{{{inspect()}
。您可以在调试器中获得与{{dump()}}
相同的信息。您可以进行编辑
/vendor/twig/twig/lib/Twig/Extension/Debug.php
如果将细枝用作独立组件,请将var\u dump()
函数更改为\doctor\Common\Util\Debug::dump()
,下面是一些如何启用调试的示例,因为dump(variable)函数不太可能直接工作
独立的
这是在icode4food提供的链接上找到的
$twig = new Twig_Environment($loader, array(
'debug' => true,
// ...
));
$twig->addExtension(new Twig_Extension_Debug());
锡莱克斯
因为Symfony>=2.6,所以有一个不错的组件,但是Twig的
dump()
函数没有使用它
要覆盖它,我们可以创建一个扩展:
在下面的实现中,不要忘记替换名称空间
Fuz/AppBundle/Resources/config/services.yml
Fuz/AppBundle/Twig/Extension/DebugExtension.php
转储所有自定义变量:
<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 %}
传递到视图的变量:
{%为键,值在_context%}
{%如果键以“{%”开头
{%else%}
{{key}}
{{dump(value)}}
{%endif%}
{%endfor%}
您可以使用我的插件,它将为您实现这一点(将很好地格式化输出):
您可以使用dump功能并按如下方式打印
{{ dump(MyVar) }}
但还有一件好事,如果您不将任何参数设置为dump函数,它将打印所有变量都可用,如
{{ dump() }}
此处的完整配方可供快速参考(请注意,所有步骤都是强制性的):
1) 实例化细枝时,传递调试选项
$twig = new Twig_Environment(
$loader, ['debug'=>true, 'cache'=>false, /*other options */]
);
2) 添加调试扩展
$twig->addExtension(new \Twig_Extension_Debug());
3) 像@Hazarapet Tunnyan指出的那样使用它
{{ dump(MyVar) }}
或
或
由于大多数优秀的PHP程序员都喜欢使用XDebug逐步运行代码并实时观察变量的变化,因此使用dump()
感觉就像回到了糟糕的过去
这就是为什么我制作了一个Twig调试扩展并将其放在Github上
编写器需要delboy1978uk/twig调试
然后添加扩展名。如果您不使用Symfony,如下所示:
<?php
use Del\Twig\DebugExtension;
/** @var $twig Twig_Environment */
$twig->addExtension(new DebugExtension());
注册后,您现在可以在细枝模板中的任何位置执行此操作:
{{ breakpoint() }}
现在,您可以使用XDebug,执行将暂停,您可以看到上下文和环境的所有属性
玩得开心-D如果您所在的环境无法使用转储
功能(例如:opencart),您可以尝试:
{{ my_variable | json_encode(constant('JSON_PRETTY_PRINT')) }}
我得到了“未知标记名”debug“,无论是否设置该细枝。debug:true如果您在prod模式下工作,则必须清除缓存first@AlexanderMorland您好,Alex,您必须按此处所述扩展配置:要摆脱未知标记名“debug”
error。顺便说一句:要清除缓存,您可以使用console工具()这样做有什么好处吗?它更简单…如果你不知道控制台工具,我建议你检查一下。你不必设置twig:debug:1
,因为它从你的前端控制器的环境中继承了这些信息。否则你可能会在pr中非常规地输出调试信息od环境。只要您在开发环境中工作,它在默认情况下是启用的,在prod环境中是禁用的。这在Twig 1.5中已经过时。请参阅其他答案:如果您收到一个错误,说未知标记名“debug”
,请扩展您的配置(在全局config.yml
或config_dev.yml
中)如下所述:此方法在Twig 1.5中被弃用。在answer中添加了弃用说明。顺便说一句,在使用{dump()}时,使用关系映射转储对象时要小心
要转储所有变量,它将返回一个空白页。是否有其他方法转储变量?我使用的是最新版本的Symfony 2.5,并具有config.yml和
$twig->addExtension(new \Twig_Extension_Debug());
{{ dump(MyVar) }}
{{ dump() }}
{{ dump(MyObject.MyPropertyName) }}
<?php
use Del\Twig\DebugExtension;
/** @var $twig Twig_Environment */
$twig->addExtension(new DebugExtension());
twig_debugger:
class: Del\Twig\DebugExtension
tags:
- { name: twig.extension }
{{ breakpoint() }}
{{ my_variable | json_encode(constant('JSON_PRETTY_PRINT')) }}