Yii - Eventos

Puedes usar eventspara inyectar código personalizado en ciertos puntos de ejecución. Puede adjuntar código personalizado a un evento y, cuando se activa el evento, el código se ejecuta. Por ejemplo, un objeto de registrador puede desencadenar unuserRegisteredevento cuando un nuevo usuario se registra en su sitio web. Si una clase necesita desencadenar eventos, debes extenderla desde la clase yii \ base \ Component.

Un controlador de eventos es una devolución de llamada PHP. Puede utilizar las siguientes devoluciones de llamada:

  • Una función PHP global especificada como una cadena.

  • Una función anónima.

  • Una matriz de un nombre de clase y un método como una cadena, por ejemplo, ['ClassName', 'methodName']

  • Una matriz de un objeto y un método como una cadena, por ejemplo, [$ obj, 'methodName']

Step 1 - Para adjuntar un controlador a un evento, debe llamar al 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
});

Puede adjuntar uno o más controladores a un evento. Los controladores adjuntos se llaman en el orden en que se adjuntaron al evento.

Step 2 - Para detener la invocación de los controladores, debe configurar el yii\base\Event::$handled property a true.

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

Step 3 - Para insertar el controlador al comienzo de la cola, puede llamar yii\base\Component::on(), pasando falso para el cuarto parámetro.

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

Step 4 - Para activar un evento, llame al 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 desconectar a un controlador de un evento, debe llamar al 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
});