Yii - Eventos

Você pode usar eventspara injetar código personalizado em determinados pontos de execução. Você pode anexar código personalizado a um evento e, quando o evento for disparado, o código será executado. Por exemplo, um objeto logger pode acionar umuserRegisteredevento quando um novo usuário se registra em seu site. Se uma classe precisa acionar eventos, você deve estendê-la da classe yii \ base \ Component.

Um manipulador de eventos é um retorno de chamada PHP. Você pode usar os seguintes retornos de chamada -

  • Uma função PHP global especificada como uma string.

  • Uma função anônima.

  • Uma matriz de um nome de classe e um método como uma string, por exemplo, ['ClassName', 'methodName']

  • Uma matriz de um objeto e um método como uma string, por exemplo, [$ obj, 'methodName']

Step 1 - Para anexar um manipulador a um evento, você deve chamar o yii\base\Component::on() método.

$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
});

Você pode anexar um ou mais manipuladores a um evento. Os manipuladores anexados são chamados na ordem em que foram anexados ao evento.

Step 2 - Para interromper a invocação dos manipuladores, você deve definir o yii\base\Event::$handled property para true.

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

Step 3 - Para inserir o manipulador no início da fila, você pode chamar yii\base\Component::on(), passando falso para o quarto parâmetro.

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

Step 4 - Para acionar um evento, chame o yii\base\Component::trigger() método.

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);
   }
}

Step 5 - Para desanexar um manipulador de um evento, você deve chamar o yii\base\Component::off() método.

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