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

问题描述 投票:0回答:8

如何在 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

php yii yii2
8个回答
16
投票

因为您询问的是

var_dump
print_r
之类的问题,我可以为此建议内置助手。它被称为 yii\helpers\VarDumperYii::trace() 用于记录跟踪消息。

VarDumper 旨在取代有缺陷的 PHP 函数

var_dump
print_r

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

VarDumper 可以按如下方式使用,

VarDumper::dump($var);

我个人不使用它,只是尝试了几次来测试。

我认为最好使用 Xdebug 来实现此目的。

另请参阅PsySH


3
投票

使用这个:

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

2
投票

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

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

2
投票

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

use yii\helpers\VarDumper;

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

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


1
投票

你可以自己做: 在您的主索引页面(

back/index.php
front/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)
。在那里你的自卸车正在工作。恭喜!


0
投票

你应该安装 tracy racy。

dump($var);
bdump($var); // dump in bar 

0
投票

显然,

dd
默认情况下存在于我的基本 Yii2 应用程序中。

参见

Yii wiki
,输出看起来就像 Laravel 一样!显然,它确实在幕后使用了
VarDumper::dump($yourVar);

<?php

$yourVar = 90; // or whatever

dd($yourVar);

-1
投票

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

为了简单和快速开发,我为那些使用 Yii 的人创建了一个助手。您可以直接调用

dd($var1, $var2, ….);
进行转储和死亡,或
d($var1, $var2, ….);
进行转储数据。

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

© www.soinside.com 2019 - 2024. All rights reserved.