Events
Metrix provides events for extending its functionality. Modules and plugins can register event listeners, typically in their init() methods, to change Metrix’s behaviour.
Source Events
The registerSourceTypes Event
The event that is triggered when registering source types, so a module or plugin can add its own. See Custom Sources for a complete example.
Add class names to $event->types. Metrix lists the registered types in the control panel and creates sources from them.
use craft\events\RegisterComponentTypesEvent;
use modules\sitemodule\MySource;
use verbb\metrix\services\Sources;
use yii\base\Event;
Event::on(Sources::class, Sources::EVENT_REGISTER_SOURCE_TYPES, function(RegisterComponentTypesEvent $event) {
$event->types[] = MySource::class;
});The beforeSaveSource Event
The event that is triggered before a source is saved.
Listeners can change the source before Metrix validates and saves it. The event can't cancel the save.
use verbb\metrix\events\SourceEvent;
use verbb\metrix\services\Sources;
use yii\base\Event;
Event::on(Sources::class, Sources::EVENT_BEFORE_SAVE_SOURCE, function(SourceEvent $event) {
$source = $event->source;
$isNew = $event->isNew;
\Craft::info(($isNew ? 'Creating' : 'Updating') . " Metrix Source {$source->handle}.", __METHOD__);
});The afterSaveSource Event
The event that is triggered after a source is saved.
use verbb\metrix\events\SourceEvent;
use verbb\metrix\services\Sources;
use yii\base\Event;
Event::on(Sources::class, Sources::EVENT_AFTER_SAVE_SOURCE, function(SourceEvent $event) {
$source = $event->source;
$isNew = $event->isNew;
\Craft::info(($isNew ? 'Created' : 'Updated') . " Metrix Source {$source->handle}.", __METHOD__);
});The beforeDeleteSource Event
The event that is triggered before a source is deleted.
The event can't cancel the delete.
use verbb\metrix\events\SourceEvent;
use verbb\metrix\services\Sources;
use yii\base\Event;
Event::on(Sources::class, Sources::EVENT_BEFORE_DELETE_SOURCE, function(SourceEvent $event) {
$source = $event->source;
\Craft::info("Preparing to delete Metrix Source {$source->handle}.", __METHOD__);
});The afterDeleteSource Event
The event that is triggered after a source is deleted.
use verbb\metrix\events\SourceEvent;
use verbb\metrix\services\Sources;
use yii\base\Event;
Event::on(Sources::class, Sources::EVENT_AFTER_DELETE_SOURCE, function(SourceEvent $event) {
$source = $event->source;
\Craft::info("Deleted Metrix Source {$source->handle}.", __METHOD__);
});View Events
The beforeSaveView Event
The event that is triggered before a view is saved.
Listeners can change the view before Metrix validates and saves it. The event can't cancel the save.
use verbb\metrix\events\ViewEvent;
use verbb\metrix\services\Views;
use yii\base\Event;
Event::on(Views::class, Views::EVENT_BEFORE_SAVE_VIEW, function(ViewEvent $event) {
$view = $event->view;
$isNew = $event->isNew;
\Craft::info(($isNew ? 'Creating' : 'Updating') . " Metrix View {$view->handle}.", __METHOD__);
});The afterSaveView Event
The event that is triggered after a view is saved.
use verbb\metrix\events\ViewEvent;
use verbb\metrix\services\Views;
use yii\base\Event;
Event::on(Views::class, Views::EVENT_AFTER_SAVE_VIEW, function(ViewEvent $event) {
$view = $event->view;
$isNew = $event->isNew;
\Craft::info(($isNew ? 'Created' : 'Updated') . " Metrix View {$view->handle}.", __METHOD__);
});The beforeDeleteView Event
The event that is triggered before a view is deleted.
The event can't cancel the delete.
use verbb\metrix\events\ViewEvent;
use verbb\metrix\services\Views;
use yii\base\Event;
Event::on(Views::class, Views::EVENT_BEFORE_DELETE_VIEW, function(ViewEvent $event) {
$view = $event->view;
\Craft::info("Preparing to delete Metrix View {$view->handle}.", __METHOD__);
});The afterDeleteView Event
The event that is triggered after a view is deleted.
use verbb\metrix\events\ViewEvent;
use verbb\metrix\services\Views;
use yii\base\Event;
Event::on(Views::class, Views::EVENT_AFTER_DELETE_VIEW, function(ViewEvent $event) {
$view = $event->view;
\Craft::info("Deleted Metrix View {$view->handle}.", __METHOD__);
});Preset Events
The beforeSavePreset Event
The event that is triggered before a preset is saved.
Listeners can change the preset before Metrix validates it and writes it to project config. The event can't cancel the save.
use verbb\metrix\events\PresetEvent;
use verbb\metrix\services\Presets;
use yii\base\Event;
Event::on(Presets::class, Presets::EVENT_BEFORE_SAVE_PRESET, function(PresetEvent $event) {
$preset = $event->preset;
$isNew = $event->isNew;
\Craft::info(($isNew ? 'Creating' : 'Updating') . " Metrix Preset {$preset->handle}.", __METHOD__);
});The afterSavePreset Event
The event that is triggered after a preset is saved.
use verbb\metrix\events\PresetEvent;
use verbb\metrix\services\Presets;
use yii\base\Event;
Event::on(Presets::class, Presets::EVENT_AFTER_SAVE_PRESET, function(PresetEvent $event) {
$preset = $event->preset;
$isNew = $event->isNew;
\Craft::info(($isNew ? 'Created' : 'Updated') . " Metrix Preset {$preset->handle}.", __METHOD__);
});The beforeDeletePreset Event
The event that is triggered before a preset is deleted.
This event fires before Metrix removes the preset from project config. The event can't cancel the delete.
use verbb\metrix\events\PresetEvent;
use verbb\metrix\services\Presets;
use yii\base\Event;
Event::on(Presets::class, Presets::EVENT_BEFORE_DELETE_PRESET, function(PresetEvent $event) {
$preset = $event->preset;
\Craft::info("Preparing to delete Metrix Preset {$preset->handle}.", __METHOD__);
});The beforeApplyPresetDelete Event
The event that is triggered before a preset deletion from project config is applied to the database.
This fires when project config changes are applied, including on other environments syncing the change, where beforeDeletePreset doesn't fire. The event can't cancel the delete.
use verbb\metrix\events\PresetEvent;
use verbb\metrix\services\Presets;
use yii\base\Event;
Event::on(Presets::class, Presets::EVENT_BEFORE_APPLY_PRESET_DELETE, function(PresetEvent $event) {
$preset = $event->preset;
\Craft::info("Applying the deletion of Metrix Preset {$preset->handle}.", __METHOD__);
});The afterDeletePreset Event
The event that is triggered after a preset is deleted.
use verbb\metrix\events\PresetEvent;
use verbb\metrix\services\Presets;
use yii\base\Event;
Event::on(Presets::class, Presets::EVENT_AFTER_DELETE_PRESET, function(PresetEvent $event) {
$preset = $event->preset;
\Craft::info("Deleted Metrix Preset {$preset->handle}.", __METHOD__);
});Widget Events
The registerWidgetTypes Event
The event that is triggered when registering widget types, so a module or plugin can add its own. See Custom Widgets for a complete example.
Add class names to $event->types. Metrix lists the registered types in the control panel and creates widgets from them.
use craft\events\RegisterComponentTypesEvent;
use modules\sitemodule\MyWidget;
use verbb\metrix\services\Widgets;
use yii\base\Event;
Event::on(Widgets::class, Widgets::EVENT_REGISTER_WIDGET_TYPES, function(RegisterComponentTypesEvent $event) {
$event->types[] = MyWidget::class;
});The beforeSaveWidget Event
The event that is triggered before a widget is saved.
Listeners can change the widget before Metrix validates and saves it. The event can't cancel the save.
use verbb\metrix\events\WidgetEvent;
use verbb\metrix\services\Widgets;
use yii\base\Event;
Event::on(Widgets::class, Widgets::EVENT_BEFORE_SAVE_WIDGET, function(WidgetEvent $event) {
$widget = $event->widget;
$isNew = $event->isNew;
\Craft::info(($isNew ? 'Creating' : 'Updating') . ' Metrix Widget ' . get_class($widget) . '.', __METHOD__);
});The afterSaveWidget Event
The event that is triggered after a widget is saved.
use verbb\metrix\events\WidgetEvent;
use verbb\metrix\services\Widgets;
use yii\base\Event;
Event::on(Widgets::class, Widgets::EVENT_AFTER_SAVE_WIDGET, function(WidgetEvent $event) {
$widget = $event->widget;
$isNew = $event->isNew;
\Craft::info(($isNew ? 'Created' : 'Updated') . ' Metrix Widget ' . get_class($widget) . '.', __METHOD__);
});The beforeDeleteWidget Event
The event that is triggered before a widget is deleted.
The event can't cancel the delete.
use verbb\metrix\events\WidgetEvent;
use verbb\metrix\services\Widgets;
use yii\base\Event;
Event::on(Widgets::class, Widgets::EVENT_BEFORE_DELETE_WIDGET, function(WidgetEvent $event) {
$widget = $event->widget;
\Craft::info('Preparing to delete Metrix Widget ' . get_class($widget) . '.', __METHOD__);
});The afterDeleteWidget Event
The event that is triggered after a widget is deleted.
use verbb\metrix\events\WidgetEvent;
use verbb\metrix\services\Widgets;
use yii\base\Event;
Event::on(Widgets::class, Widgets::EVENT_AFTER_DELETE_WIDGET, function(WidgetEvent $event) {
$widget = $event->widget;
\Craft::info('Deleted Metrix Widget ' . get_class($widget) . '.', __METHOD__);
});Period Events
The registerPeriodTypes Event
The event that is triggered when registering period types, so a module or plugin can add its own. See Custom Periods for a complete example.
Add class names to $event->types. Metrix lists the registered types in the control panel and creates periods from them.
use craft\events\RegisterComponentTypesEvent;
use modules\sitemodule\MyPeriod;
use verbb\metrix\services\Periods;
use yii\base\Event;
Event::on(Periods::class, Periods::EVENT_REGISTER_PERIOD_TYPES, function(RegisterComponentTypesEvent $event) {
$event->types[] = MyPeriod::class;
});