Maison > cadre php > PensezPHP > le corps du texte

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

PHPz
Libérer: 2023-06-02 17:37:22
avant
905 Les gens l'ont consulté

    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

    Par exemple :

    php think make:listener UserListener

    sera dans le applistener下生成UserListener classe après l'exécution.

    2. Configurez l'écoute : configurez la classe UserListener dans le tableau d'écoute du fichier appevent.php, comme suit :

    'listen' => applistenerUserListener']
    ],

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

    event('testEvent');
    Copier après la connexion

    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;;
        }
    }
    Copier après la connexion

    Index : la classe qui déclenche l'écoute

    Copier après la connexion

    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();
        }
    }
    Copier après la connexion

    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

    Par exemple :

    php think make:subscribe UserSubscribe

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

    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();
        }
    }
    Copier après la connexion

    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

    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;]);
    Copier après la connexion

    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

    Copier après la connexion

    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();
        }
    }
    Copier après la connexion

    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!

    Étiquettes associées:
    source:yisu.com
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal