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