From 20666567e8bc0d60f54446e96045ba451632005c Mon Sep 17 00:00:00 2001 From: Qiang Xue Date: Thu, 27 Jun 2013 21:50:38 -0400 Subject: [PATCH] debug toolbar WIP --- framework/yii/base/View.php | 14 ++++- framework/yii/debug/Debugger.php | 54 +++++++++++++++++++ .../DebugTarget.php => debug/LogTarget.php} | 6 ++- framework/yii/debug/Module.php | 1 + framework/yii/debug/Toolbar.php | 38 ------------- .../debug/controllers/DefaultController.php | 9 ++-- framework/yii/debug/views/default/index.php | 1 + framework/yii/debug/views/default/toolbar.php | 33 ++++++------ framework/yii/debug/views/layouts/main.php | 21 ++++++++ 9 files changed, 116 insertions(+), 61 deletions(-) create mode 100644 framework/yii/debug/Debugger.php rename framework/yii/{logging/DebugTarget.php => debug/LogTarget.php} (95%) delete mode 100644 framework/yii/debug/Toolbar.php create mode 100644 framework/yii/debug/views/default/index.php create mode 100644 framework/yii/debug/views/layouts/main.php diff --git a/framework/yii/base/View.php b/framework/yii/base/View.php index a931a1b4a4..e4485ef00d 100644 --- a/framework/yii/base/View.php +++ b/framework/yii/base/View.php @@ -25,13 +25,21 @@ use yii\widgets\FragmentCache; class View extends Component { /** - * @event ViewEvent an event that is triggered by [[beginPage()]]. + * @event Event an event that is triggered by [[beginPage()]]. */ const EVENT_BEGIN_PAGE = 'beginPage'; /** - * @event ViewEvent an event that is triggered by [[endPage()]]. + * @event Event an event that is triggered by [[endPage()]]. */ const EVENT_END_PAGE = 'endPage'; + /** + * @event Event an event that is triggered by [[beginBody()]]. + */ + const EVENT_BEGIN_BODY = 'beginBody'; + /** + * @event Event an event that is triggered by [[endBody()]]. + */ + const EVENT_END_BODY = 'endBody'; /** * @event ViewEvent an event that is triggered by [[renderFile()]] right before it renders a view file. */ @@ -532,6 +540,7 @@ class View extends Component public function beginBody() { echo self::PL_BODY_BEGIN; + $this->trigger(self::EVENT_BEGIN_BODY); } /** @@ -539,6 +548,7 @@ class View extends Component */ public function endBody() { + $this->trigger(self::EVENT_END_BODY); echo self::PL_BODY_END; } diff --git a/framework/yii/debug/Debugger.php b/framework/yii/debug/Debugger.php new file mode 100644 index 0000000000..93ccc265ce --- /dev/null +++ b/framework/yii/debug/Debugger.php @@ -0,0 +1,54 @@ + + * @since 2.0 + */ +class Debugger extends Component +{ + public $debugAction = 'debug/default/toolbar'; + public $panels; + + public function init() + { + parent::init(); + Yii::$app->setModule('debug', array( + 'class' => 'yii\debug\Module', + 'panels' => $this->panels, + )); + Yii::$app->log->targets[] = new LogTarget; + Yii::$app->getView()->on(View::EVENT_END_BODY, array($this, 'renderToolbar')); + } + + public function renderToolbar($event) + { + if (Yii::$app->getModule('debug', false) !== null) { + return; + } + + /** @var View $view */ + $id = 'yii-debug-toolbar'; + $url = Yii::$app->getUrlManager()->createUrl($this->debugAction, array( + 'tag' => Yii::getLogger()->tag, + )); + $view = $event->sender; + $view->registerJs("yii.debug.load('$id', '$url');"); + $view->registerAssetBundle('yii/debug'); + echo Html::tag('div', '', array( + 'id' => $id, + 'style' => 'display: none', + )); + } +} diff --git a/framework/yii/logging/DebugTarget.php b/framework/yii/debug/LogTarget.php similarity index 95% rename from framework/yii/logging/DebugTarget.php rename to framework/yii/debug/LogTarget.php index 92a74d66cb..1192cb3b89 100644 --- a/framework/yii/logging/DebugTarget.php +++ b/framework/yii/debug/LogTarget.php @@ -5,15 +5,16 @@ * @license http://www.yiiframework.com/license/ */ -namespace yii\logging; +namespace yii\debug; use Yii; +use yii\logging\Target; /** * @author Qiang Xue * @since 2.0 */ -class DebugTarget extends Target +class LogTarget extends Target { public $maxLogFiles = 20; @@ -72,6 +73,7 @@ class DebugTarget extends Target $iterator = new \DirectoryIterator(Yii::$app->getRuntimePath() . '/debug'); $files = array(); foreach ($iterator as $file) { + /** @var \DirectoryIterator $file */ if (preg_match('/^[\d\-]+\.log$/', $file->getFileName()) && $file->isFile()) { $files[] = $file->getPathname(); } diff --git a/framework/yii/debug/Module.php b/framework/yii/debug/Module.php index a680f532be..a0cf8831a4 100644 --- a/framework/yii/debug/Module.php +++ b/framework/yii/debug/Module.php @@ -14,4 +14,5 @@ namespace yii\debug; class Module extends \yii\base\Module { public $controllerNamespace = 'yii\debug\controllers'; + public $panels; } diff --git a/framework/yii/debug/Toolbar.php b/framework/yii/debug/Toolbar.php deleted file mode 100644 index c205277a09..0000000000 --- a/framework/yii/debug/Toolbar.php +++ /dev/null @@ -1,38 +0,0 @@ - - * @since 2.0 - */ -class Toolbar extends Widget -{ - public $debugAction = 'debug/default/toolbar'; - - public function run() - { - if (Yii::$app->hasModule('debug')) { - $id = 'yii-debug-toolbar'; - $url = Yii::$app->getUrlManager()->createUrl($this->debugAction, array( - 'tag' => Yii::getLogger()->tag, - )); - $view = $this->getView(); - $view->registerJs("yii.debug.load('$id', '$url');"); - $view->registerAssetBundle('yii/debug'); - echo Html::tag('div', '', array( - 'id' => $id, - 'style' => 'display: none', - )); - } - } -} diff --git a/framework/yii/debug/controllers/DefaultController.php b/framework/yii/debug/controllers/DefaultController.php index f1160b11f2..56d583f690 100644 --- a/framework/yii/debug/controllers/DefaultController.php +++ b/framework/yii/debug/controllers/DefaultController.php @@ -16,9 +16,11 @@ use yii\web\Controller; */ class DefaultController extends Controller { + public $layout = 'main'; + public function actionIndex($tag) { - echo $tag; + return $this->render('index'); } public function actionToolbar($tag) @@ -26,9 +28,10 @@ class DefaultController extends Controller $file = Yii::$app->getRuntimePath() . "/debug/$tag.log"; if (preg_match('/^[\w\-]+$/', $tag) && is_file($file)) { $data = json_decode(file_get_contents($file), true); - echo $this->renderPartial('toolbar', $data); + $data['tag'] = $tag; + return $this->renderPartial('toolbar', $data); } else { - echo "Unable to find debug data tagged with '$tag'."; + return "Unable to find debug data tagged with '$tag'."; } } } diff --git a/framework/yii/debug/views/default/index.php b/framework/yii/debug/views/default/index.php new file mode 100644 index 0000000000..57cf853ab4 --- /dev/null +++ b/framework/yii/debug/views/default/index.php @@ -0,0 +1 @@ +here we are diff --git a/framework/yii/debug/views/default/toolbar.php b/framework/yii/debug/views/default/toolbar.php index 0b08d4bf48..27f02f8f81 100644 --- a/framework/yii/debug/views/default/toolbar.php +++ b/framework/yii/debug/views/default/toolbar.php @@ -19,21 +19,22 @@ echo Html::style(" margin: 0 10px; "); ?> +
+
+ $tag)); ?> +
-
+
+ Peak memory: +
+ +
+ Time spent: +
+ +
+
+ +
+
- -
-Peak memory: -
- -
-Time spent: -
- -
-
- -
-
- diff --git a/framework/yii/debug/views/layouts/main.php b/framework/yii/debug/views/layouts/main.php new file mode 100644 index 0000000000..c43f3ffb7f --- /dev/null +++ b/framework/yii/debug/views/layouts/main.php @@ -0,0 +1,21 @@ + + + +beginPage(); ?> + + <?php echo Html::encode($this->title); ?> + head(); ?> + + +beginBody(); ?> + +endBody(); ?> + +endPage(); ?> +