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