In many cases, Xdebug
is not suitable for debugging as it involves clicks to run to a particular line of codes. I want to use something that is similar to cak
You should add following lines to your protected/main.php file for debug:true mode. Trust work like a charm !
return array(
'preload' => array(
'debug',
),
'components' => array(
'debug' => array(
'class' => 'ext.yii2-debug.Yii2Debug',
),
'db' => array(
'enableProfiling' => true,
'enableParamLogging' => true,
),
),
);
I finally managed to find out a solution:
In my main.php I did this:
'log' => array(
'class' => 'CLogRouter',
'routes' => array(
array(
'class' => 'CFileLogRoute',
'levels' => 'trace, info, error, warning, vardump',
),
// uncomment the following to show log messages on web pages
array(
'class' => 'CWebLogRoute',
'enabled' => YII_DEBUG,
'levels' => 'error, warning, trace, notice',
'categories' => 'application',
'showInFireBug' => false,
),
),
),
In my controller I used this code:
$a = new array(1,2,3);
Yii::trace(CVarDumper::dumpAsString($a));
The Application Log is shown below in every page.
Yii::trace(VarDumper::dumpAsString($array));
An example of customized log class is given below.
<?php
namespace app\helpers;
use Yii;
use yii\helpers\VarDumper;
class Log {
const LOG_CATEGORY_NAME = 'myLog';
public static function e($msg, $data) {
if (isset($data)) {
$msg .= " " . VarDumper::dumpAsString($data);
}
Yii::error($msg, self::LOG_CATEGORY_NAME);
}
}
Example:
Log.e("Copying the Estimate data failed. Model::getError(): ",
$model->getErrors());