Skip to content

Instantly share code, notes, and snippets.

@ostark
Created September 27, 2018 16:56
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ostark/d83a00f689994c5515c10a4f1531ade0 to your computer and use it in GitHub Desktop.
Save ostark/d83a00f689994c5515c10a4f1531ade0 to your computer and use it in GitHub Desktop.
A wildcard event handler that logs all Yii/Craft events
class EventCatcher
{
/**
* @var array
*/
protected $classConstants = [];
public function __invoke(yii\base\Event $event)
{
$triggerClass = get_class($event->sender);
$eventClass = get_class($event);
$name = $this->getEventConstantName($triggerClass, $event->name);
\Craft::warning("$triggerClass::$name using ($eventClass)", 'event');
}
protected function getEventConstantName(string $class, string $name): string
{
if (!isset($this->classConstants[$class])) {
$info = new ReflectionClass($class);
$this->classConstants[$class] = $info->getConstants();
}
foreach ($this->classConstants[$class] as $k => $v) {
if ($v === $name) {
return $k;
}
}
return $name;
}
}
@ostark
Copy link
Author

ostark commented Sep 27, 2018

register it in your config/app.php like this:

    'bootstrap' => [
        function () {
            Event::on('*', '*', new EventCatcher());
        }
    ]

and you get this in your logs:

2018-09-27 16:41:20 [-][1][-][warning][event] craft\db\Query::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] nystudio107\seomatic\services\Sitemaps::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] nystudio107\seomatic\services\FrontendTemplates::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] nystudio107\seomatic\services\MetaBundles::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\db\Query::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\services\Plugins::EVENT_AFTER_LOAD_PLUGINS using (yii\base\Event)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\elements\db\UserQuery::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\db\Query::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\db\Query::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\elements\db\UserQuery::EVENT_BEFORE_PREPARE using (craft\events\CancelableEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\db\Query::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\PlainText::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\Matrix::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\Color::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\Categories::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\redactor\Field::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\Assets::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\Tags::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\Matrix::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\PlainText::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\PlainText::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\Table::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\PlainText::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\Assets::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\Assets::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\Lightswitch::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\PlainText::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\Assets::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\redactor\Field::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\PlainText::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\Matrix::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\Assets::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\fields\Entries::EVENT_DEFINE_BEHAVIORS using (craft\events\DefineBehaviorsEvent)


...

2018-09-27 16:41:20 [-][1][-][warning][event] craft\web\Application::EVENT_AFTER_REQUEST using (yii\base\Event)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\web\Response::EVENT_BEFORE_SEND using (yii\base\Event)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\web\Response::EVENT_AFTER_PREPARE using (yii\base\Event)
2018-09-27 16:41:20 [-][1][-][warning][event] craft\web\Response::EVENT_AFTER_SEND using (yii\base\Event)

@ostark
Copy link
Author

ostark commented Sep 27, 2018

btw, this is a good example how to register a event handler class instead of a closure.

@putyourlightson
Copy link

This is fantastic Oliver, and great use of the __invoke() method!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment