Class yii\debug\controllers\DefaultController

Inheritanceyii\debug\controllers\DefaultController » yii\web\Controller
Available since extension's version2.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.

Protected Methods

Hide inherited methods

Method Description Defined By
getManifest() yii\debug\controllers\DefaultController

Property Details

Hide inherited properties

$layout public property
public $layout 'main'
$module public property

Owner module.

public yii\debug\Module $module null
$summary public property

The summary data (e.g. URL, time)

public array $summary null

Method Details

Hide inherited methods

actionDownloadMail() public method

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);
}

            
actionIndex() public method

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(),
    ]);
}

            
actionToolbar() public method

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',
    ]);
}

            
actionView() public method

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,
    ]);
}

            
actions() public method

public void actions ( )

                public function actions()
{
    $actions = [];
    foreach ($this->module->panels as $panel) {
        $actions = array_merge($actions, $panel->actions);
    }
    return $actions;
}

            
beforeAction() public method

public void beforeAction ( $action )
$action

                public function beforeAction($action)
{
    Yii::$app->response->format = Response::FORMAT_HTML;
    return parent::beforeAction($action);
}

            
getManifest() protected method

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;
}

            
loadData() public method

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'.");
}