Browse Source

Fixed #1504: Debug toolbar isn't loaded successfully in some environments when xdebug is enabled

tags/2.0.0-beta
Qiang Xue 11 years ago
parent
commit
68cb074c6a
  1. 2
      extensions/yii/debug/CHANGELOG.md
  2. 23
      extensions/yii/debug/controllers/DefaultController.php
  3. 1
      framework/CHANGELOG.md

2
extensions/yii/debug/CHANGELOG.md

@ -4,7 +4,7 @@ Yii Framework 2 debug extension Change Log
2.0.0 beta under development 2.0.0 beta under development
---------------------------- ----------------------------
- no changes in this release. - Bug #1504: Debug toolbar isn't loaded successfully in some environments when xdebug is enabled (qiangxue)
2.0.0 alpha, December 1, 2013 2.0.0 alpha, December 1, 2013
----------------------------- -----------------------------

23
extensions/yii/debug/controllers/DefaultController.php

@ -64,7 +64,7 @@ class DefaultController extends Controller
public function actionToolbar($tag) public function actionToolbar($tag)
{ {
$this->loadData($tag); $this->loadData($tag, 3);
return $this->renderPartial('toolbar', [ return $this->renderPartial('toolbar', [
'tag' => $tag, 'tag' => $tag,
'panels' => $this->module->panels, 'panels' => $this->module->panels,
@ -78,9 +78,12 @@ class DefaultController extends Controller
private $_manifest; private $_manifest;
protected function getManifest() protected function getManifest($forceReload = false)
{ {
if ($this->_manifest === null) { if ($this->_manifest === null || $forceReload) {
if ($forceReload) {
clearstatcache();
}
$indexFile = $this->module->dataPath . '/index.data'; $indexFile = $this->module->dataPath . '/index.data';
if (is_file($indexFile)) { if (is_file($indexFile)) {
$this->_manifest = array_reverse(unserialize(file_get_contents($indexFile)), true); $this->_manifest = array_reverse(unserialize(file_get_contents($indexFile)), true);
@ -91,9 +94,13 @@ class DefaultController extends Controller
return $this->_manifest; return $this->_manifest;
} }
public function loadData($tag) public function loadData($tag, $maxRetry = 0)
{ {
$manifest = $this->getManifest(); // 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])) { if (isset($manifest[$tag])) {
$dataFile = $this->module->dataPath . "/$tag.data"; $dataFile = $this->module->dataPath . "/$tag.data";
$data = unserialize(file_get_contents($dataFile)); $data = unserialize(file_get_contents($dataFile));
@ -107,8 +114,10 @@ class DefaultController extends Controller
} }
} }
$this->summary = $data['summary']; $this->summary = $data['summary'];
} else { return;
throw new NotFoundHttpException("Unable to find debug data tagged with '$tag'.");
} }
} }
throw new NotFoundHttpException("Unable to find debug data tagged with '$tag'.");
}
} }

1
framework/CHANGELOG.md

@ -7,6 +7,7 @@ Yii Framework 2 Change Log
- Bug #1446: Logging while logs are processed causes infinite loop (qiangxue) - Bug #1446: Logging while logs are processed causes infinite loop (qiangxue)
- Bug #1497: Localized view files are not correctly returned (mintao) - Bug #1497: Localized view files are not correctly returned (mintao)
- Bug #1500: Log messages exported to files are not separated by newlines (omnilight, qiangxue) - Bug #1500: Log messages exported to files are not separated by newlines (omnilight, qiangxue)
- Bug #1504: Debug toolbar isn't loaded successfully in some environments when xdebug is enabled (qiangxue)
- Bug #1509: The SQL for creating Postgres RBAC tables is incorrect (qiangxue) - Bug #1509: The SQL for creating Postgres RBAC tables is incorrect (qiangxue)
- Bug #1545: It was not possible to execute db Query twice, params where missing (cebe) - Bug #1545: It was not possible to execute db Query twice, params where missing (cebe)
- Bug #1550: fixed the issue that JUI input widgets did not property input IDs. - Bug #1550: fixed the issue that JUI input widgets did not property input IDs.

Loading…
Cancel
Save