Maison  >  Article  >  cadre php  >  Comment implémenter le mécanisme d'événement Thinkphp

Comment implémenter le mécanisme d'événement Thinkphp

PHPz
PHPzavant
2023-06-02 17:37:22863parcourir

    Il existe deux manières d'implémenter le mécanisme d'événement : via la surveillance et via l'abonnement

    1. Via la surveillance

    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 1aadac7f2406e7af8572785d428d421bapplistener下生成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 :

    'listen' => applistenerUserListener']
    ],

    3. Déclencher l'écoute : Ajoutez le code suivant là où vous devez déclencher l'écoute

    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 &#39;hello function&#39;;
        }
    }

    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 abonnement

    1 Créez une classe d'abonnement

    Entrez le répertoire racine du framework en mode ligne de commande pour exécuter

    php think make:subscribe b12b8fd28545369682c06d5a713e866d

    Par exemple :

    php think make:subscribe UserSubscribe

    Après l'exécution, la classe UserSubscribe sera générée sous le 8e2495a098bb28e755f076cfbdaf32eeappsubscribe.

    2. Configurez la surveillance

    Configurez 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'écoute

    3. Déclencher l'écoute

    Identique à la première méthode

    4. Traiter la logique d'écoute

    Il 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 automatique
    La 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 suivant

    Le code des classes Other et Index est le même que la première approche

    UserSubscribe : 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 manuelle
    Tout 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 ef7b4059bfdc8077ef8c11ac7c8ac259

    Par exemple :

    php think make:event UserEvent

    Aprè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(&#39;testEvent&#39;, [app(&#39;app\event\UserEvent&#39;), &#39;handle&#39;]);

    Le code complet est le suivant

    Le code des classes Other et Index est le même que la première approche

    UserSubscribe : classe d'abonnement aux événements

    UserEvent : 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!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer