如何在Smarty中像使用PHP的var_dump()一样调试变量

189

我在模板中有一些变量,但是我不知道它们被赋值的位置。我需要知道一个特定变量中包含了什么内容;比如说,我有一个smarty变量叫做member。我尝试使用{debug},但是没有弹出窗口显示。

我该如何在模板中输出/调试像var_dump()这样的smarty变量?

14个回答

376

你可以使用{php}标签

方法1(在Smarty 3.1或更高版本中无法使用):

{php}

$var =
$this->get_template_vars('var');
var_dump($var);

{/php}

方法二:

{$var|@print_r}

方法三:

{$var|@var_dump}

滥用php标签并不是一个好的实践,理想情况下出于安全原因它们应该被禁用。@debug_print_var(请参见Chris的答案)是一个更好的解决方案。 - thelem
1
随着Smarty最新版本禁用{php}...{/php}标签,方法2或3是更好的选择。 - Luke Stevenson
1
如果你使用 <pre> 标签包裹代码输出,效果会更好。上述方法是最佳的选择。 - Alexander Kludt
3
为了避免在末尾多余的echo,可以向print_r()函数中添加一个额外的参数,使其返回输出到smarty: {$var|@print_r:true} - ivanhoe
1
变量的最干净的视图是 {$var|@dump},甚至不需要用 <pre></pre> 包装。在 Smarty 3 上,{$var|dump} 的效果也是一样的。 - Sharak

124

这应该可以工作:

{$var|@print_r}
或者
{$var|@var_dump}

在数组中,需要使用 @ 符号才能让Smarty运行修改器(modifier)作用于整个数组,否则会对每个元素进行修改。


8
比所选答案好很多。 - Damien
1
比选择的答案更好?说真的?选择的答案里也包含了那些解决方案,只是多包含了一个适用于较旧Smarty版本的解决方案,所以我真的不明白你怎么能说它比选择的更好 xD。 - oliiix
@oliiix 只需查看修订版本。 在2012年,答案与现在相距甚远! - csabinho

29

不管价值如何,您可以使用{$varname|@debug_print_var}来获得类似于var_dump()的输出结果来查看您的变量。


有时候你不确定变量是什么,很多时候 @print_r@var_dump 不起作用(例如在 x-cart 中),但是 @debug_print_var 的输出是存在的。 - skobaljic
非常感谢!你的答案是唯一对我有效的。 - Tana

13

只需在您的.tpl文件中使用{debug}并查看您的源代码


3
好的。实际上这为我创建了一个弹出窗口,所以我不必查看源代码。但我需要禁用我的弹出窗口拦截器。 - Hobo

6
在新的Smarty中,它是这样的:
<pre>
{var_dump($variable)}
</pre>

5

尝试使用Smarty Session:

{$smarty.session|@debug_print_var}

或者
{$smarty.session|@print_r}

为了使输出更美观,将其放在<pre> </pre>标签之间。

3

尝试这个...在Smarty中将$debugging设置为TRUE。


当然我知道,但我需要在不修改核心PHP文件的情况下完成它。 - streetparade

2

我更喜欢使用<script>console.log({$varname|@json_encode})</script>来记录控制台日志。


注意:在 console.log('code'); 中需要添加单引号。 - undefined

1
如果你想要更漂亮的东西,我建议:
{"<?php\n\$data =\n"|@cat:{$yourvariable|@var_export:true|@cat:";\n?>"}|@highlight_string:true}

只需将yourvariable替换为您的变量即可


1

为了更好的显示:

{$var|@dump}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接