如何在Yii中转储变量以进行调试?

时间:2015-03-19 01:02:43

标签: php yii yii2

如何在Yii中转储和打印变量以进行调试?我想使用var_dump()print_r()。我尝试使用Yii::trace(),但它在runtime/logs/app.log中因此错误而崩溃。它甚至没有告诉我代码中的行失败。

2015-03-18 20:54:11 [::1][-][-][warning][yii\log\Dispatcher::dispatch] Unable to send log via yii\debug\LogTarget: Exception 'Exception' with message 'Serialization of 'SimpleXMLElement' is not allowed'

in /cygdrive/c/Users/Chloe/workspace/AffiliateArbitrage/vendor/yiisoft/yii2-debug/LogTarget.php:58

Stack trace:
#0 /cygdrive/c/Users/Chloe/workspace/AffiliateArbitrage/vendor/yiisoft/yii2-debug/LogTarget.php(58): serialize(Array)
#1 /cygdrive/c/Users/Chloe/workspace/AffiliateArbitrage/vendor/yiisoft/yii2-debug/LogTarget.php(112): yii\debug\LogTarget->export(Array)
#2 /cygdrive/c/Users/Chloe/workspace/AffiliateArbitrage/vendor/yiisoft/yii2/log/Dispatcher.php(183): yii\debug\LogTarget->collect(Array, true)
#3 /cygdrive/c/Users/Chloe/workspace/AffiliateArbitrage/vendor/yiisoft/yii2/log/Logger.php(170): yii\log\Dispatcher->dispatch(Array, true)
#4 [internal function]: yii\log\Logger->flush(true)
#5 {main}

参考 http://www.yiiframework.com/doc-2.0/guide-runtime-logging.html

6 个答案:

答案 0 :(得分:9)

因为您询问var_dumpprint_r之类的内容,我可以为此建议内置帮助程序。它被称为yii\helpers\VarDumperYii::trace()用于记录跟踪消息。

  

VarDumper旨在取代错误的PHP函数var_dumpprint_r

     

它可以正确识别a中的递归引用对象   复杂的对象结构。它还具有递归深度控制   避免无限递归显示某些特殊变量。

     

VarDumper可以按如下方式使用,

VarDumper::dump($var);

就我个人而言,我并没有使用它,只是尝试了几次进行测试。

我认为最好将Xdebug用于此目的。

另见PsySH

答案 1 :(得分:2)

我用过这个,但我确信有更好的方法。

Yii::warning('**********************', var_export($category,true));
config/web.php
    'log' => [
        ...
        'flushInterval' => 1, // for debug
        'targets' => [
            [
                ...
                'exportInterval' => 1, // for debug - slow
            ],
        ],
    ],

答案 2 :(得分:1)

使用此:

<?php echo '<pre>'; print_r($model); exit; ?>

答案 3 :(得分:0)

使用它来查看变量或对象数组。

use yii\helpers\VarDumper;

VarDumper::dump($variableArray , $dept = 10, $highlight = true);

详细信息,您可以阅读文档 http://www.yiiframework.com/doc-2.0/yii-helpers-basevardumper.html#dump()-detail

答案 4 :(得分:0)

你可以自己做: 在您的主索引页面(back/index.phpfront/index.php)中,将此代码添加到顶部ob_start();。然后定义2个函数以便更好地调试

function dd($v){
    ob_clean(); 
    var_dump($v);
    exit;
}
function dj($v){
    ob_clean(); 
    echo CJSON::encode($v);
    exit;
}

并在主索引页的最后添加ob_end_flush();。现在,您可以致电dd($model)dj($model)。那里有你的翻斗车工作。恭喜!

答案 5 :(得分:-1)

我在Yii 2中写了一篇关于调试变量这个问题的文章:

  

因为为了简单和快速开发,我为使用Yii的人创建了一个帮手。您只需拨打dd($var1, $var2, ….);以转储&amp;死或d($var1, $var2, ….);转储数据。

详细信息和安装说明已在:https://dangnhsite.wordpress.com/2016/04/06/variable-debug-in-yii-2/