Yii - Événements

Vous pouvez utiliser eventspour injecter du code personnalisé à certains points d'exécution. Vous pouvez attacher du code personnalisé à un événement, et lorsque l'événement est déclenché, le code est exécuté. Par exemple, un objet enregistreur peut déclencher unuserRegisteredévénement lorsqu'un nouvel utilisateur s'inscrit sur votre site Web. Si une classe doit déclencher des événements, vous devez l'étendre à partir de la classe yii \ base \ Component.

Un gestionnaire d'événements est un rappel PHP. Vous pouvez utiliser les rappels suivants -

  • Une fonction PHP globale spécifiée sous forme de chaîne.

  • Une fonction anonyme.

  • Un tableau d'un nom de classe et une méthode sous forme de chaîne, par exemple, ['ClassName', 'methodName']

  • Un tableau d'un objet et d'une méthode sous forme de chaîne, par exemple [$ obj, 'methodName']

Step 1 - Pour attacher un gestionnaire à un événement, vous devez appeler le yii\base\Component::on() méthode.

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

Vous pouvez attacher un ou plusieurs gestionnaires à un événement. Les gestionnaires attachés sont appelés dans l'ordre dans lequel ils ont été attachés à l'événement.

Step 2 - Pour arrêter l'invocation des gestionnaires, vous devez définir le yii\base\Event::$handled property à true.

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

Step 3 - Pour insérer le gestionnaire au début de la file d'attente, vous pouvez appeler yii\base\Component::on(), en passant false pour le quatrième paramètre.

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

Step 4 - Pour déclencher un événement, appelez le yii\base\Component::trigger() méthode.

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 - Pour détacher un gestionnaire d'un événement, vous devez appeler le yii\base\Component::off() méthode.

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