Учебники

Yii — События

Вы можете использовать события для внедрения пользовательского кода в определенных точках выполнения. Вы можете прикрепить пользовательский код к событию, и когда событие срабатывает, код выполняется. Например, объект регистратора может вызвать событие userRegistered, когда новый пользователь регистрируется на вашем веб-сайте. Если класс должен инициировать события, вы должны расширить его из класса yii \ base \ Component.

Обработчик событий — это обратный вызов PHP. Вы можете использовать следующие обратные вызовы —

  • Глобальная функция PHP, указанная в виде строки.

  • Анонимная функция.

  • Массив имени класса и метода в виде строки, например, [‘ClassName’, ‘methodName’]

  • Массив объекта и метод в виде строки, например, [$ obj, ‘methodName’]

Глобальная функция PHP, указанная в виде строки.

Анонимная функция.

Массив имени класса и метода в виде строки, например, [‘ClassName’, ‘methodName’]

Массив объекта и метод в виде строки, например, [$ obj, ‘methodName’]

Шаг 1 — Чтобы прикрепить обработчик к событию, вы должны вызвать метод yii \ base \ Component :: on () .

$obj = new Obj;
// this handler is a global function
$obj->on(Obj::EVENT_HELLO, 'function_name');
// this handler is an object method
$obj->on(Obj::EVENT_HELLO, [$object, 'methodName']);
// this handler is a static class method
$obj->on(Obj::EVENT_HELLO, ['app\components\MyComponent', 'methodName']);
// this handler is an anonymous function

$obj->on(Obj::EVENT_HELLO, function ($event) {
   // event handling logic
});

Вы можете прикрепить один или несколько обработчиков к событию. Прикрепленные обработчики вызываются в том порядке, в котором они были присоединены к событию.

Шаг 2. Чтобы остановить вызов обработчиков, необходимо установить для свойства yii \ base \ Event :: $ handled значение true .

$obj->on(Obj::EVENT_HELLO, function ($event) {
   $event->handled = true;
});

Шаг 3 — Чтобы вставить обработчик в начало очереди, вы можете вызвать yii \ base \ Component :: on () , передав false для четвертого параметра.

$obj->on(Obj::EVENT_HELLO, function ($event) {
   // ...
}, $data, false);

Шаг 4 — Чтобы вызвать событие, вызовите метод yii \ base \ Component :: trigger () .

namespace app\components;
use yii\base\Component;
use yii\base\Event;
class Obj extends Component {
   const EVENT_HELLO = 'hello';
   public function triggerEvent() {
      $this->trigger(self::EVENT_HELLO);
   }
}

Шаг 5 — Чтобы отсоединить обработчик от события, вы должны вызвать метод yii \ base \ Component :: off () .