【问题标题】:How to Debug Variables in Smarty like in PHP var_dump()如何在 Smarty 中调试变量,如 PHP var_dump()
【发布时间】:2011-01-26 18:26:39
【问题描述】:

我在模板中有一些变量,但我不知道我将它们分配在哪里。我需要知道特定变量中的内容;例如,假设我在 smarty 中有一个名为 member 的变量。我尝试使用{debug},但它不起作用,并且没有显示弹出窗口。

如何在模板中使用 var_dump() 之类的东西输出/调试 smarty 变量?

【问题讨论】:

    标签: php templates debugging smarty


    【解决方案1】:

    你可以使用{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 的回答)是一个更好的解决方案。
    • 随着最新版本的 Smarty 禁用 {php}...{/php} 标签,方法 2 或 3 是更好的选择。
    • 如果你用
       标签包围它,输出看起来会更好。以上方法是最好的。
    • 在 print_r() 中添加一个额外的参数,使其将输出返回给 smarty,以避免在末尾产生额外的回显:{$var|@print_r:true}
    • 变量的最清晰视图给出了{$var|@dump},甚至不需要用<pre></pre> 包装。 {$var|dump} 在 Smarty 3 上的工作原理相同。
    【解决方案2】:

    这应该可行:

    {$var|@print_r}
    

    {$var|@var_dump}
    

    数组需要 @ 以使 smarty 对整个事物运行修饰符,否则它会为每个元素执行此操作。

    【讨论】:

    • 比选择的答案好多了。
    • 比选择的答案更好?呸呸呸?选择的答案也有这些解决方案,但只包含一个用于较旧的 smarty 版本的解决方案,所以我真的不明白你怎么能说它比选择的那个更好 xD
    【解决方案3】:

    对于它的价值,您可以通过 {$varname|@debug_print_var} 为您的变量获取 var_dump()-esque 输出。

    【讨论】:

    • 有时您不确定变量是什么,很多时候@print_r@var_dump 不起作用(例如在x-cart 中),但@debug_print_var 输出在那里。
    • 非常感谢!你的答案是唯一对我有用的。
    【解决方案4】:

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

    【讨论】:

    • 不错。这实际上为我创建了一个弹出窗口,因此我不必查看源代码。不过不得不禁用我的弹出窗口阻止程序。
    【解决方案5】:

    在新的 Smarty 中是:

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

    【讨论】:

      【解决方案6】:

      试试 Smarty Session:

      {$smarty.session|@debug_print_var}
      

      {$smarty.session|@print_r}
      

      为了美化你的输出,在&lt;pre&gt; &lt;/pre&gt;标签之间使用它

      【讨论】:

        【解决方案7】:

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

        【讨论】:

        • 我当然知道,但我需要在不修改核心 php 文件的情况下这样做
        【解决方案8】:

        在 prestashop 1.6.x 中调试 smarty :

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

        另一个有用的调试标签:

        {debug}
        

        【讨论】:

          【解决方案9】:

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

          {"<?php\n\$data =\n"|@cat:{$yourvariable|@var_export:true|@cat:";\n?>"}|@highlight_string:true}
          

          只需将 yourvariable 替换为您的变量

          【讨论】:

            【解决方案10】:

            在 smarty V3 中你可以使用这个

            {var_dump($variable)}

            【讨论】:

              【解决方案11】:

              {$variable|@debug_print_var nofilter} 并且您不需要添加“&lt;pre&gt;”标签

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

              【讨论】:

                【解决方案12】:

                在 smarty 中有内置的修饰符,您可以使用 |(单个管道运算符)来使用它。像这样{$varname|@print_r} 会将值打印为print_r($php_variable)

                【讨论】:

                  【解决方案13】:

                  我更喜欢使用&lt;script&gt;console.log({$varname|@json_encode})&lt;/script&gt; 登录控制台。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2015-06-29
                    • 2019-01-06
                    • 1970-01-01
                    • 2013-12-17
                    • 1970-01-01
                    • 2011-11-11
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多