Einführung in Ereignisse
Mithilfe von Ereignissen können Sie die Ausführung eines voreingestellten Codeabschnitts zu einem bestimmten Zeitpunkt auslösen. Ereignisse sind nicht nur eine Möglichkeit, Code zu entkoppeln, sondern auch eine Möglichkeit der Gestaltung von Geschäftsprozessen. In moderner Software gibt es überall Ereignisse. Wenn Sie beispielsweise ein Weibo veröffentlichen, wird ein Ereignis ausgelöst, das dazu führt, dass Personen, die Ihnen folgen, Ihre neuen Inhalte sehen. Bei Veranstaltungen gibt es mehrere Elemente:
Was ist das für eine Veranstaltung? In einem Softwaresystem gibt es viele Ereignisse. Das Veröffentlichen eines neuen Weibo ist ein Ereignis, und das Löschen eines Weibo ist ebenfalls ein Ereignis.
Wer hat das Ereignis ausgelöst? Was Sie auf Weibo posten, ist das Ereignis, das Sie auslösen.
Wer ist für die Überwachung dieses Ereignisses verantwortlich? Oder wer weiß, dass dieses Ereignis passiert ist? Das Modul auf dem Server, das die Benutzerregistrierung verwaltet, wird Ihr neues Weibo-Event definitiv nicht empfangen. Wie gehe ich mit dem
-Ereignis um? Für den Fall, dass ein neues Weibo veröffentlicht wird, dient dies dazu, andere Benutzer zu benachrichtigen, die Ihnen folgen.
Was sind die ereignisbezogenen Daten? Für die Veröffentlichung eines neuen Weibo-Ereignisses müssen die enthaltenen Daten mindestens den Inhalt des neuen Weibo, die Uhrzeit usw. umfassen.
Falleinführung: Da ist eine Katze, und die Maus rennt weg, wenn sie bellt
Um diesen Fall umzusetzen, erstellen wir den Ereignisordner im frontend
-Ordner Es gibt 2 Klassendateien im 🎜>Ereignisordner , eine Cat-Klasse und eine Mouse-Klasse
<?php namespace frontend\event; /** * 猫类 * Class: \frontend\event\Cat * * 为了让猫具有事件能力 * 所以要继承 \yii\base\Component * >>> \yii\base\Component 对 \yii\base\Event 的 on 方法进行重写 * >>> \yii\base\Event 适合类级绑定 * >>> \yii\base\Component 适合对象级绑定 */ class Cat extends \yii\base\Component { /** * 猫发出叫声 */ public function shout() { echo '猫:miao miao miao <br />'; // 猫叫了之后 触发猫的 miao 事件 $this->trigger('miao'); } }
<?php namespace frontend\event; /** * 老鼠类 * Class: \frontend\event\Mouse */ class Mouse { public function run() { echo '老鼠:有猫来了,赶紧跑啊~~<br />'; } }
<?php namespace frontend\controllers; use frontend\event\Cat; use frontend\event\Mouse; /** * Class: \frontend\controllers\Event */ class EventController extends \yii\web\Controller { public function actionTest() { $cat = new Cat(); $mouse = new Mouse(); // 需事先给猫绑定 miao 事件才可以触发此事件 // 猫一叫,就触发老鼠的 run 方法 $cat->on('miao', [$mouse, 'run']); // 猫发出叫声 $cat->shout(); } }
in den Browser ein, um
<🎜 zu erhalten >
猫:miao miao miao 老鼠:有猫来了,赶紧跑啊~~
Plötzlich, eines Tages, schließt sich der Hund diesem Fall an. Solange die Katze bellt, geht der Hund zur Katze
so steht es auch im Event-OrdnerHundemitglied Dog.php hinzufügen
<?php namespace frontend\event; /** * Class \frontend\event\Dog */ class Dog extends \yii\base\Component { /** * 找猫 */ public function findCat() { echo '狗:wang wang wang, 猫在哪里??'; } }
... // 需事先给猫绑定 miao 事件才可以触发此事件 // 猫一叫,就触发老鼠的 run 方法 $cat->on('miao', [$mouse, 'run']); $cat->on('miao', [$dog, 'findCat']); // 添加狗找猫事件 // 让猫发出叫声 $cat->shout(); ...
猫:miao miao miao 老鼠:有猫来了,赶紧跑啊~~ 狗:wang wang wang, 猫在哪里??
frontend/controllers/EventController.php ändern
use frontend\event\Cat; use frontend\event\Mouse; use frontend\event\Dog; ... public function actionTest() { $cat = new Cat(); $mouse = new Mouse(); $dog = new Dog(); // 需事先给猫绑定 miao 事件才可以触发此事件 // 猫一叫,就触发老鼠的 run 方法 $cat->on('miao', [$mouse, 'run']); $cat->on('miao', [$dog, 'findCat']); // 并非直接删除 $cat->on('miao', [$dog, 'findCat']); // 而是通过 off 解除绑定 $cat->off('miao', [$dog, 'findCat']); // 让猫发出叫声 $cat->shout(); } ...
Bindung auf Klassenebene
zugewiesene Objekt, das heißt, fügen Sie am Ende der actionTest-Methode in frontend/controllers/EventController.php hinzu (new Cat())->shout();
löst das Miao-Ereignis nicht aus
public function actionTest() { ... // 让猫发出叫声 $cat->shout(); // 会触发 miao 事件 (new Cat())->shout(); // 不会触发 miao 事件 }
Gibt es eine Möglichkeit, dass Mäuse weglaufen, solange das Geräusch von einer Katze erzeugt wird? ? Dies erfordert die Verwendung von
Ereignisbindung auf Klassenebene
Frontend/Controller ändern / EventController.php
use frontend\event\Cat; use frontend\event\Mouse; use yii\base\Event; ... public function actionTest() { $cat = new Cat(); $mouse = new Mouse(); // 类级别的事件绑定 // 只要猫发出声音,不管是什么猫,都会触发老鼠的 run 方法 Event::on(Cat::className() ,'miao', [$mouse, 'run']); // 让猫发出叫声 $cat->shout(); // 会触发 miao 事件 (new Cat())->shout(); // 会触发 miao 事件 }
猫:miao miao miao 老鼠:有猫来了,赶紧跑啊~~ 猫:miao miao miao 老鼠:有猫来了,赶紧跑啊~~
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von Beispielen für EVENT-Ereignisse in Yii2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!