|
|
|
Events
|
|
|
|
======
|
|
|
|
|
|
|
|
TBD, see also [Component.md](../api/base/Component.md).
|
|
|
|
|
|
|
|
There is no longer the need to define an `on`-method in order to define an event in Yii 2.0.
|
|
|
|
Instead, you can use whatever event names. To attach a handler to an event, you should
|
|
|
|
use the `on` method now:
|
|
|
|
|
|
|
|
```php
|
|
|
|
$component->on($eventName, $handler);
|
|
|
|
// To detach the handler, use:
|
|
|
|
// $component->off($eventName, $handler);
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
When you attach a handler, you can now associate it with some parameters which can be later
|
|
|
|
accessed via the event parameter by the handler:
|
|
|
|
|
|
|
|
```php
|
|
|
|
$component->on($eventName, $handler, $params);
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Because of this change, you can now use "global" events. Simply trigger and attach handlers to
|
|
|
|
an event of the application instance:
|
|
|
|
|
|
|
|
```php
|
|
|
|
Yii::$app->on($eventName, $handler);
|
|
|
|
....
|
|
|
|
// this will trigger the event and cause $handler to be invoked.
|
|
|
|
Yii::$app->trigger($eventName);
|
|
|
|
```
|
|
|
|
|
|
|
|
If you need to handle all instances of a class instead of the object you can attach a handler like the following:
|
|
|
|
|
|
|
|
```php
|
|
|
|
Event::on(ActiveRecord::className(), ActiveRecord::EVENT_AFTER_INSERT, function ($event) {
|
|
|
|
Yii::trace(get_class($event->sender) . ' is inserted.');
|
|
|
|
});
|
|
|
|
```
|
|
|
|
|
|
|
|
The code above defines a handler that will be triggered for every Active Record object's `EVENT_AFTER_INSERT` event.
|