Maison > Article > développement back-end > Explication détaillée d'exemples d'événements EVENT dans Yii2
Introduction aux événements
À l'aide d'événements, vous pouvez déclencher l'exécution d'un morceau de code prédéfini à un moment précis. Les événements ne sont pas seulement un moyen de découpler le code, mais aussi un moyen. de conception de processus métier. Dans les logiciels modernes, les événements sont partout. Par exemple, si vous publiez un Weibo, un événement sera déclenché, permettant aux personnes qui vous suivent de voir votre nouveau contenu. Pour les événements, il y a plusieurs éléments :
De quel genre d'événement s'agit-il ? Dans un système logiciel, il existe de nombreux événements. La publication d'un nouveau Weibo est un événement, et la suppression d'un Weibo est également un événement.
Qui a déclenché l'événement ? Ce que vous publiez sur Weibo est l'événement que vous déclenchez.
Qui est responsable du suivi de cet événement ? Ou qui sait si cet événement s'est produit ? Le module sur le serveur qui gère l'enregistrement des utilisateurs ne recevra certainement pas votre nouvel événement Weibo. Comment gérer l'événement
? En cas de publication d'un nouveau Weibo, il s'agit d'avertir les autres utilisateurs qui vous suivent.
Quelles sont les données liées à l'événement ? Pour publier un nouvel événement Weibo, les données incluses doivent au moins inclure le contenu du nouveau Weibo, l'heure, etc.
Introduction au cas : Il y a un chat, et la souris s'enfuira lorsqu'elle aboie
Afin de mettre en œuvre ce cas, nous créons le dossier d'événements dans le dossier frontend
Il y a 2 fichiers de classe dans le 🎜>dossier d'événements , une classe Cat et une classe Souris
<?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'); } }Souris. php
<?php namespace frontend\event; /** * 老鼠类 * Class: \frontend\event\Mouse */ class Mouse { public function run() { echo '老鼠:有猫来了,赶紧跑啊~~<br />'; } }EventController.php
<?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(); } }Entrez http://votredomaine.com/?r=event/test
dans le navigateur pour obtenir
猫:miao miao miao 老鼠:有猫来了,赶紧跑啊~~en appelant cat La méthode scream déclenche l'événement miao, et la souris s'enfuitSoudain, un jour, le chien rejoint cette affaire, et tant que le chat aboie, le chien ira vers le chat
est donc également dans le dossier de l'événement
Ajouter un membre chien Dog.php
<?php namespace frontend\event; /** * Class \frontend\event\Dog */ class Dog extends \yii\base\Component { /** * 找猫 */ public function findCat() { echo '狗:wang wang wang, 猫在哪里??'; } }Modifier frontend/controllers/EventController.php
Ajouter un chien recherchant un événement chat
... // 需事先给猫绑定 miao 事件才可以触发此事件 // 猫一叫,就触发老鼠的 run 方法 $cat->on('miao', [$mouse, 'run']); $cat->on('miao', [$dog, 'findCat']); // 添加狗找猫事件 // 让猫发出叫声 $cat->shout(); ...Actualiser http dans le navigateur ://votredomaine.com/?r=event/test
Obtenir
猫:miao miao miao 老鼠:有猫来了,赶紧跑啊~~ 狗:wang wang wang, 猫在哪里??Soudain, le chien s'est ennuyé et n'a plus voulu y aller au chat, alors il a aboyé ce qu'il voulait
Ensuite, nous avons juste besoin de dissocier le chien à la recherche d'un événement de chat
Modifier frontend/controllers/EventController.php
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(); } ...Donc le le résultat final manquera naturellement du son du chienLiaison au niveau de la classe Mais il y a un problème. L'événement ci-dessus est dirigé vers l'objet assigné par
$cat, c'est-à-dire, ajoutez
à la fin de la méthode actionTest dans frontend/controllers/EventController.php (new Cat())->shout(); ne déclenchera pas l'événement miao
public function actionTest() { ... // 让猫发出叫声 $cat->shout(); // 会触发 miao 事件 (new Cat())->shout(); // 不会触发 miao 事件 }Raison :
tous les événements sont liés via l'objet $catY a-t-il un moyen pour que les souris s'enfuient tant que le son est émis par un chat ? ?
Cela nécessite l'utilisation d'une
liaison d'événement au niveau de la classe
la liaison d'événement au niveau de la classe nécessite l'utilisation de la classe yiibaseEventmodify frontend/controllers / 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 事件 }Actualisez la page et obtenez
猫:miao miao miao 老鼠:有猫来了,赶紧跑啊~~ 猫:miao miao miao 老鼠:有猫来了,赶紧跑啊~~Résumé
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!