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 b12b8fd28545369682c06d5a713e866d
Par exemple :
php think make:listener UserListener
sera dans le 1aadac7f2406e7af8572785d428d421bapp
listener下生成
UserListener classe après l'exécution.
2. Configurez l'écoute : configurez la classe UserListener dans le tableau d'écoute du fichier 8e2495a098bb28e755f076cfbdaf32eeappevent.php, comme suit :
3. Déclencher l'écoute : Ajoutez le code suivant là où vous devez déclencher l'écoute'listen' => applistenerUserListener']
],
event('testEvent');Remarque : Le paramètre testEvent ici est le nom de l'événement, qui peut être défini à volonté, mais il doit s'agir du nom de l'événement. comme dans event.php Les noms de clés configurés dans le fichier sont cohérents. Vous pouvez apporter le deuxième paramètre lors du déclenchement de la surveillance. Vous pouvez transmettre n'importe quelle donnée à la classe UserListener via le deuxième paramètre, qui est le paramètre de la méthode handle (si vous ne comprenez pas ce que cela signifie, veuillez le comprendre avec le code complet ci-dessous). 4. Traiter la logique d'écoute : Compléter la logique métier dans la méthode handle de la classe UserListener Le code complet est le suivant Autre : une classe utilisée pour tester
<?php namespace app\controller; class Other { public function hello() { echo 'hello function'; } }Index : la classe qui déclenche l'écoute
UserListener : classe d'écoute d'événements<?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(); } }2. Par abonnement1 Créez une classe d'abonnementEntrez le répertoire racine du framework en mode ligne de commande pour exécuterphp think make:subscribe b12b8fd28545369682c06d5a713e866dPar exemple :php think make:subscribe UserSubscribeAprès l'exécution, la classe UserSubscribe sera générée sous le 8e2495a098bb28e755f076cfbdaf32eeappsubscribe. 2. Configurez la surveillanceConfigurez la classe UserSubscribe dans le tableau d'abonnement du fichier appevent.php, comme suit :'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(); } }4.2 Liaison manuelleTout d'abord, créez une classe d'événement, responsable du traitement logique métier spécifique. Entrez le répertoire racine du framework en mode ligne de commande et exécutez :php think make:event ef7b4059bfdc8077ef8c11ac7c8ac259Par 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']);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énementsUserEvent : classe de traitement d'événements<?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!