Yii - Ereignisse

Sie können verwenden eventsan bestimmten Ausführungspunkten benutzerdefinierten Code einfügen. Sie können einem Ereignis benutzerdefinierten Code hinzufügen. Wenn das Ereignis ausgelöst wird, wird der Code ausgeführt. Beispielsweise kann ein Logger-Objekt a auslösenuserRegisteredEreignis, wenn sich ein neuer Benutzer auf Ihrer Website registriert. Wenn eine Klasse Ereignisse auslösen muss, sollten Sie sie aus der Klasse yii \ base \ Component erweitern.

Ein Event-Handler ist ein PHP-Rückruf. Sie können die folgenden Rückrufe verwenden:

  • Eine globale PHP-Funktion, die als Zeichenfolge angegeben wird.

  • Eine anonyme Funktion.

  • Ein Array aus einem Klassennamen und einer Methode als Zeichenfolge, z. B. ['Klassenname', 'Methodenname']

  • Ein Array eines Objekts und einer Methode als Zeichenfolge, z. B. [$ obj, 'methodName']

Step 1 - Um einen Handler an ein Ereignis anzuhängen, sollten Sie das aufrufen yii\base\Component::on() Methode.

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

Sie können einem Ereignis einen oder mehrere Handler hinzufügen. Die angehängten Handler werden in der Reihenfolge aufgerufen, in der sie an das Ereignis angehängt wurden.

Step 2 - Um den Aufruf der Handler zu stoppen, sollten Sie die festlegen yii\base\Event::$handled property zu true.

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

Step 3 - Um den Handler am Anfang der Warteschlange einzufügen, können Sie anrufen yii\base\Component::on()Übergabe von false für den vierten Parameter.

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

Step 4 - Um ein Ereignis auszulösen, rufen Sie die yii\base\Component::trigger() Methode.

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 - Um einen Handler von einem Ereignis zu trennen, sollten Sie das aufrufen yii\base\Component::off() Methode.

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