Class yii\debug\controllers\DefaultController
| Inheritance | yii\debug\controllers\DefaultController » yii\web\Controller | 
|---|---|
| Available since extension's version | 2.0 | 
| Source Code | https://github.com/yiisoft/yii2-debug/blob/master/src/controllers/DefaultController.php | 
Debugger controller provides browsing over available debug logs.
See also yii\debug\Panel.
Public Properties
| Property | Type | Description | Defined By | 
|---|---|---|---|
| $layout | yii\debug\controllers\DefaultController | ||
| $module | yii\debug\Module | Owner module. | yii\debug\controllers\DefaultController | 
| $summary | array | The summary data (e.g. URL, time) | yii\debug\controllers\DefaultController | 
Public Methods
Protected Methods
| Method | Description | Defined By | 
|---|---|---|
| getManifest() | yii\debug\controllers\DefaultController | 
Property Details
Method Details
| public void actionDownloadMail ( $file ) | ||
| $file | ||
                public function actionDownloadMail($file)
{
    $filePath = Yii::getAlias($this->module->panels['mail']->mailPath) . '/' . basename($file);
    if ((mb_strpos($file, '\\') !== false || mb_strpos($file, '/') !== false) || !is_file($filePath)) {
        throw new NotFoundHttpException('Mail file not found');
    }
    return Yii::$app->response->sendFile($filePath);
}
            
        
| public void actionIndex ( ) | 
                public function actionIndex()
{
    $searchModel = new Debug();
    $dataProvider = $searchModel->search($_GET, $this->getManifest());
    // load latest request
    $tags = array_keys($this->getManifest());
    $tag = reset($tags);
    $this->loadData($tag);
    return $this->render('index', [
        'panels' => $this->module->panels,
        'dataProvider' => $dataProvider,
        'searchModel' => $searchModel,
        'manifest' => $this->getManifest(),
    ]);
}
            
        
| public void actionToolbar ( $tag ) | ||
| $tag | ||
                public function actionToolbar($tag)
{
    $this->loadData($tag, 5);
    return $this->renderPartial('toolbar', [
        'tag' => $tag,
        'panels' => $this->module->panels,
        'position' => 'bottom',
    ]);
}
            
        
See also yii\debug\Panel.
| public mixed actionView ( $tag = null, $panel = null ) | ||
| $tag | string|null | Debug data tag. | 
| $panel | string|null | Debug panel ID. | 
| return | mixed | Response. | 
|---|---|---|
| throws | \yii\web\NotFoundHttpException | if debug data not found. | 
                public function actionView($tag = null, $panel = null)
{
    if ($tag === null) {
        $tags = array_keys($this->getManifest());
        $tag = reset($tags);
    }
    $this->loadData($tag);
    if (isset($this->module->panels[$panel])) {
        $activePanel = $this->module->panels[$panel];
    } else {
        $activePanel = $this->module->panels[$this->module->defaultPanel];
    }
    if ($activePanel->hasError()) {
        Yii::$app->errorHandler->handleException($activePanel->getError());
    }
    return $this->render('view', [
        'tag' => $tag,
        'summary' => $this->summary,
        'manifest' => $this->getManifest(),
        'panels' => $this->module->panels,
        'activePanel' => $activePanel,
    ]);
}
            
        
| public void actions ( ) | 
                public function actions()
{
    $actions = [];
    foreach ($this->module->panels as $panel) {
        $actions = array_merge($actions, $panel->actions);
    }
    return $actions;
}
            
        
| public void beforeAction ( $action ) | ||
| $action | ||
                public function beforeAction($action)
{
    Yii::$app->response->format = Response::FORMAT_HTML;
    return parent::beforeAction($action);
}
            
        
| protected array getManifest ( $forceReload = false ) | ||
| $forceReload | boolean | |
                protected function getManifest($forceReload = false)
{
    if ($this->_manifest === null || $forceReload) {
        if ($forceReload) {
            clearstatcache();
        }
        $indexFile = $this->module->dataPath . '/index.data';
        $content = '';
        $fp = @fopen($indexFile, 'r');
        if ($fp !== false) {
            @flock($fp, LOCK_SH);
            $content = fread($fp, filesize($indexFile));
            @flock($fp, LOCK_UN);
            fclose($fp);
        }
        if ($content !== '') {
            $this->_manifest = array_reverse(unserialize($content), true);
        } else {
            $this->_manifest = [];
        }
    }
    return $this->_manifest;
}
            
        
| public void loadData ( $tag, $maxRetry = 0 ) | ||
| $tag | string | Debug data tag. | 
| $maxRetry | integer | Maximum numbers of tag retrieval attempts. | 
| throws | \yii\web\NotFoundHttpException | if specified tag not found. | 
|---|---|---|
                public function loadData($tag, $maxRetry = 0)
{
    // retry loading debug data because the debug data is logged in shutdown function
    // which may be delayed in some environment if xdebug is enabled.
    // See: https://github.com/yiisoft/yii2/issues/1504
    for ($retry = 0; $retry <= $maxRetry; ++$retry) {
        $manifest = $this->getManifest($retry > 0);
        if (isset($manifest[$tag])) {
            $dataFile = $this->module->dataPath . "/$tag.data";
            $data = unserialize(file_get_contents($dataFile));
            $exceptions = $data['exceptions'];
            foreach ($this->module->panels as $id => $panel) {
                if (isset($data[$id])) {
                    $panel->tag = $tag;
                    $panel->load(unserialize($data[$id]));
                }
                if (isset($exceptions[$id])) {
                    $panel->setError($exceptions[$id]);
                }
            }
            $this->summary = $data['summary'];
            return;
        }
        sleep(1);
    }
    throw new NotFoundHttpException("Unable to find debug data tagged with '$tag'.");
}