• 关于thinkphp6中事件的理解


    上一篇文章转载了其他博主关于tp6事件的例子,下来说说自己对事件的理解

    ----------------------------------------------------------------------

    按照thinkphp官方文档的解释,事件其实不用写event类,只需要写个监听类实现 handle() 方法,通过监听标示(event.php文件配置或动态添加监听)触发即可。

    下面操作下这样的流程:

    1.添加监听类

      可以命令: php think make:listener TestListen 其实就是建立一个类: 

    <?php
    namespace applistener;
    
    class TestListener
    {
        /**
         * 事件监听处理
         * @return mixed
         */
        public function handle()
        {
            echo "测试监听...执行";
        }
    }

    2.配置监听

    在event.php 设置监听 (数组形式给定一个监听标示后边跟监听类数组)

    <?php
    // 事件定义文件
    return [
        'bind'      => [
            // 更多事件绑定
        ],
    
        'listen'    => [
            'AppInit'  => [],
            'HttpRun'  => [],
            'HttpEnd'  => [],
            'LogLevel' => [],
            'LogWrite' => [],
            // 更多事件监听
            'test' => ['applistenerTestListener'],
        ],
    
        'subscribe' => [
            // 更多事件订阅
        ],
    ];

    3.触发事件

    在控制器或其他业务里面触发

    <?php
    declare (strict_types = 1);
    namespace appadminapicontrollerpc;
    
    use thinkfacadeEvent;
    
    class Index
    {
        public function index()
        {
             //其他业务逻辑后下面要触发一个事件 
            Event::trigger('test');
            //return '您好!这是一个[pc--adminapi]示例应用';
        }
    
    }

     用tp6的话大多情况下我们是这样用的.

    =============================================================

    借用一个事件的流程,我们下来使用事件类,在实现一个事件.

     下来想用thinkphp6来实现这个机制 (这次用到事件类)

    分析下图片的流程:

    我们可以定义一个: 打小孩事件类,然后触发这个事件,后监听类(监护人)执行处理方法.

    1.创建打小孩事件 php think make:event HitChild

    <?php
    declare (strict_types = 1);
    namespace appevent;
    class HitChild
    {
        public $evildoer;
        public function __construct($evildoer){
            $this->evildoer = $evildoer;
            echo $this->evildoer."打小孩<br>";
        }
    }

    2.创建监听类 php think make:listener ParentListener (监听类要实现 处理方法handle) 这里监听者和事件做一个绑定

    <?php
    declare (strict_types = 1);
    namespace applistener;
    class ParentListener
    {
        /**
         * 事件监听处理
         *
         * @return mixed
         */
        public function handle(appeventHitChild $event)
        {
            //
            echo "检测到".$event->evildoer."打我家小孩,我要报警!<br>";
        }
    }

    3.把事件绑定和事件监听配置到event.php文件中

    <?php
    // 事件定义文件
    return [
        'bind'      => [
            'hitchild' => 'appeventHitChild',
            // 更多事件绑定
        ],
    
        'listen'    => [
            'AppInit'  => [],
            'HttpRun'  => [],
            'HttpEnd'  => [],
            'LogLevel' => [],
            'LogWrite' => [],
            // 更多事件监听
            'test' => ['applistenerTestListener'],
            'hitchild' => ['applistenerParentListener'],
        ],
    
        'subscribe' => [
            // 更多事件订阅
        ],
    ];

    4.控制器中触发事件

        public function hitchild(){
    
             //其他业务后,触发事件   
            Event::trigger(app()->make(appeventHitchild::class,["老王"]));
            return "controller--hitchild";
        }

     

     添加了事件类是不是可以把,事件触发者的信息 传递给 处理方法~~

    参考:https://www.cnblogs.com/1693977889zz/p/8389058.html

     https://www.kancloud.cn/manual/thinkphp6_0/1037492

  • 相关阅读:
    (转)simple-framework(MaliSDK框架分析)
    (转)libhybris及EGL Platform-在Glibc生态中重用Android的驱动
    (原)在firefly_rk3288开发板上解决openGL在设置32位色深以后出现花屏的问题
    参考论坛:Mali kernel driver TX011-SW-99002-r5p1-00rel0 for firefly
    (转)android媒体--stagefright概述【一】
    (转)android系统架构及源码目录结构
    (原)linux下利用cmake来编译jthread开源库
    (原)U盘可见容量不能被识别的处理方法
    学会阅读Java字节码
    JVM
  • 原文地址:https://www.cnblogs.com/fps2tao/p/15160662.html
Copyright © 2020-2023  润新知