Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Smarty中调试变量,就像在PHP var_dump()中一样_Php_Templates_Debugging_Smarty - Fatal编程技术网

如何在Smarty中调试变量,就像在PHP var_dump()中一样

如何在Smarty中调试变量,就像在PHP var_dump()中一样,php,templates,debugging,smarty,Php,Templates,Debugging,Smarty,我在模板中有一些变量,我不知道在哪里分配它们。我需要知道一个特定变量的内部是什么;例如,假设我在smarty中有一个名为member的变量。我尝试了{debug},但没有成功,也没有弹出窗口 {ddd($variable)} -> debug and die {ppp($variable)} -> debug only 如何在模板中使用类似于var\u dump()的东西输出/调试smarty变量?试试这个。。。。在Smarty中将$debug设置为TRUE。您可以使用{php}

我在模板中有一些变量,我不知道在哪里分配它们。我需要知道一个特定变量的内部是什么;例如,假设我在smarty中有一个名为
member
的变量。我尝试了
{debug}
,但没有成功,也没有弹出窗口

{ddd($variable)} -> debug and die

{ppp($variable)} -> debug only

如何在模板中使用类似于
var\u dump()
的东西输出/调试smarty变量?

试试这个。。。。在Smarty中将
$debug
设置为TRUE。

您可以使用
{php}
标记

方法1(在Smarty 3.1或更高版本中不起作用):

{php}

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

{/php}
{$var|@print_r}
{$var|@var_dump}
{$smarty.session|@debug_print_var}
方法2:

{php}

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

{/php}
{$var|@print_r}
{$var|@var_dump}
{$smarty.session|@debug_print_var}
方法3:

{php}

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

{/php}
{$var|@print_r}
{$var|@var_dump}
{$smarty.session|@debug_print_var}
这应该起作用:

{$var|@print_r}


数组需要@来让smarty针对整个事件运行修饰符,否则它会对每个元素运行修饰符。

只需在.tpl中使用{debug}并查看源代码就可以了。

不管它值多少,您都可以做
{$varname |@debug_print_var}
来获得
var_dump()
-变量的类似输出。

在smarty中有内置的修饰符,您可以通过使用
|
(单管道操作符)来使用它。像这样,
{$varname |@print_r}
将值打印为
print_r($php_变量)
尝试使用Smarty会话:

{php}

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

{/php}
{$var|@print_r}
{$var|@var_dump}
{$smarty.session|@debug_print_var}

要美化输出,请在新Smarty中的
标记之间使用它,它是:

<pre>
{var_dump($variable)}
</pre>

{var_dump($variable)}

要在prestashop 1.6.x中的smarty中调试:

{"<?php\n\$data =\n"|@cat:{$yourvariable|@var_export:true|@cat:";\n?>"}|@highlight_string:true}
另一个有用的调试标记:


如果你想要更漂亮的,我建议你

{”“}@highlight_string:true}

在smarty V3中,只需将变量替换为变量即可


{var|u dump($variable)}
我更喜欢使用
控制台.log({$varname |@json_encode})
来登录控制台。

{$variable |@debug| print_var nofilter}
并且不需要添加“
”标记


{$variable | var_dump}
显示更多内容(但更糟糕的格式),因为
debug_print_var
未在对象中显示私有变量

当然我知道这一点,但我需要在不修改核心php文件的情况下做到这一点。这实际上为我创建了一个弹出窗口,所以我不必查看源代码。但是我不得不禁用我的弹出窗口拦截器。比选择的答案好多了。比选择的答案好多了?斯雷?选择的答案中也包含这些解决方案,但只包含一个更老的smarty版本的解决方案,因此我无法真正理解您如何说它比选择的解决方案更好。使用php标记不是好的做法,理想情况下,出于安全原因,应该禁用它们@debug_print_var(参见Chris的答案)是一个更好的孤子。最新版本的Smarty禁用了
{php}…{/php}
标记,方法2或3是更好的选择。如果用标记围绕输出,输出效果会更好。上面的方法是最好的。在print_r()中添加一个额外的参数,使其将输出返回给smarty,以避免在结尾出现额外的回音:{$var |@print_r:true}有时您不确定变量是什么,并且很多时候
@print_r
@var_dump
不起作用(例如在x-cart中),但是
@debug\u print\u var
输出在那里。非常感谢!你的答案是唯一对我有效的答案。