Il existe deux manières d'implémenter le mécanisme d'événement : via la surveillance et via l'abonnement
1 Créez une classe d'écoute : entrez dans le répertoire racine du framework en mode ligne de commande pour exécuter
php. think make: listeningr
Par exemple :
php think make:listener UserListener
sera dans le app
listener下生成
UserListener classe après l'exécution.
2. Configurez l'écoute : configurez la classe UserListener dans le tableau d'écoute du fichier
3. Déclencher l'écoute : Ajoutez le code suivant là où vous devez déclencher l'écoute'listen' => applistenerUserListener']
],
event('testEvent');
<?php namespace app\controller; class Other { public function hello() { echo 'hello function'; } }
Copier après la connexion
<?php namespace app\listener; class UserListener { /** * 事件监听处理 * * @return mixed */ public function handle($event) { //当调用Index类的test1方法时该代码有效,$event为null var_dump($event); //当调用Index类的test2方法时该代码有效,$event为字符串hello var_dump($event); //当调用Index类的test3方法时该代码有效,$event为Index类的实例 //可以访问Index类的name变量 echo $event->name; //当调用Index类的test4方法时该代码有效,$event为Other类的实例 //可以调用Other类的hello方法 echo $event->hello(); } }
php think make:subscribePar exemple :
php think make:subscribe UserSubscribeAprès l'exécution, la classe UserSubscribe sera générée sous le
'subscribe' => ['appsubscribeUserSubscribe'],Remarque : Afin de tester l'effet, le UserListener configuré ci-dessus doit être supprimé du tableau d'écoute3. Déclencher l'écouteIdentique à la première méthode4. Traiter la logique d'écouteIl existe deux méthodes pour traiter la logique d'écoute. appelez cela la liaison automatique et la liaison manuelle. La reliure manuelle et la reliure automatique s'excluent mutuellement, vous ne pouvez choisir que l'une ou l'autre. 4.1 Liaison automatiqueLa méthode ontestEvent qui complète la logique métier doit être ajoutée à la classe UserSubscribe. Le nom de la méthode ajoutée ne peut pas être défini arbitrairement. La règle est d'ajouter devant le nom de l'événement. Étant donné que le nom de l'événement que nous avons défini dans event.php est testEvent, le nom de la méthode est ontestEvent (notez la casse). Une fois la méthode d'écoute définie, elle est automatiquement liée à l'événement, c'est pourquoi je l'appelle liaison automatique. Le code complet est le suivantLe code des classes Other et Index est le même que la première approcheUserSubscribe : classe d'abonnement aux événements
<?php namespace app\subscribe; class UserSubscribe { public function ontestEvent($user) { //当调用Index类的test1方法时该代码有效,$event为null var_dump($user); //当调用Index类的test2方法时该代码有效,$event为字符串hello var_dump($user); //当调用Index类的test3方法时该代码有效,$event为Index类的实例 //可以访问Index类的name变量 echo $user->name; //当调用Index类的test4方法时该代码有效,$event为Other类的实例 //可以调用Other类的hello方法 echo $user->hello(); } }
php think make:eventPar exemple :
php think make:event UserEventAprès l'exécution, < ;Le La classe UserEvent est générée sous le répertoire racine du framework>appevent. Définissez ensuite une méthode handle dans cette classe, qui a un paramètre entrant. Le nom de la méthode et les noms des paramètres transmis peuvent être définis arbitrairement. Une logique métier spécifique peut être gérée dans la méthode handle. Ensuite, ajoutez une méthode d'abonnement dans la classe UserSubscribe, qui doit recevoir un objet Event en paramètre. Ensuite, liez l'écouteur d'événement à la méthode handle de la classe UserEvent dans cette fonction. Comme suit :
$event->listen('testEvent', [app('app\event\UserEvent'), 'handle']);
Copier après la connexion
<?php declare (strict_types = 1); namespace app\event; class UserEvent { public function handle($user) { //当调用Index类的test1方法时该代码有效,$user为null var_dump($user); //当调用Index类的test2方法时该代码有效,$user为字符串hello var_dump($user); //当调用Index类的test3方法时该代码有效,$user为Index类的实例 //可以访问Index类的name变量 echo $user->name; //当调用Index类的test4方法时该代码有效,$user为Other类的实例 //可以调用Other类的hello方法 echo $user->hello(); } }
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!