EventPanel.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. /**
  3. * @link http://www.yiiframework.com/
  4. * @copyright Copyright (c) 2008 Yii Software LLC
  5. * @license http://www.yiiframework.com/license/
  6. */
  7. namespace yii\debug\panels;
  8. use Yii;
  9. use yii\base\Event;
  10. use yii\debug\Panel;
  11. /**
  12. * Debugger panel that collects and displays information about triggered events.
  13. *
  14. * > Note: this panel requires Yii framework version >= 2.0.14 to function and will not
  15. * appear at lower version.
  16. *
  17. * @author Paul Klimov <klimov.paul@gmail.com>
  18. * @since 2.0.14
  19. */
  20. class EventPanel extends Panel
  21. {
  22. /**
  23. * @var array current request events
  24. */
  25. private $_events = [];
  26. /**
  27. * {@inheritdoc}
  28. */
  29. public function init()
  30. {
  31. parent::init();
  32. Event::on('*', '*', function ($event) {
  33. /* @var $event Event */
  34. $eventData = [
  35. 'time' => microtime(true),
  36. 'name' => $event->name,
  37. 'class' => get_class($event),
  38. 'isStatic' => is_object($event->sender) ? '0' : '1',
  39. 'senderClass' => is_object($event->sender) ? get_class($event->sender) : $event->sender,
  40. ];
  41. $this->_events[] = $eventData;
  42. });
  43. }
  44. /**
  45. * {@inheritdoc}
  46. */
  47. public function getName()
  48. {
  49. return 'Events';
  50. }
  51. /**
  52. * {@inheritdoc}
  53. */
  54. public function getSummary()
  55. {
  56. return Yii::$app->view->render('panels/event/summary', [
  57. 'panel' => $this,
  58. 'eventCount' => count($this->data),
  59. ]);
  60. }
  61. /**
  62. * {@inheritdoc}
  63. */
  64. public function getDetail()
  65. {
  66. $searchModel = new \yii\debug\models\search\Event();
  67. $dataProvider = $searchModel->search(Yii::$app->request->get(), $this->data);
  68. return Yii::$app->view->render('panels/event/detail', [
  69. 'panel' => $this,
  70. 'dataProvider' => $dataProvider,
  71. 'searchModel' => $searchModel
  72. ]);
  73. }
  74. /**
  75. * {@inheritdoc}
  76. */
  77. public function save()
  78. {
  79. return $this->_events;
  80. }
  81. /**
  82. * {@inheritdoc}
  83. */
  84. public function isEnabled()
  85. {
  86. $yiiVersion = Yii::getVersion();
  87. if (!version_compare($yiiVersion, '2.0.14', '>=') && strpos($yiiVersion, '-dev') === false) {
  88. return false;
  89. }
  90. return parent::isEnabled();
  91. }
  92. }