目录
一、通过监听
二、通过订阅
1、创建订阅类
2、配置监听
3、触发监听
4、处理监听逻辑
4.1 自动绑定
4.2 手动绑定
首页 php框架 ThinkPHP Thinkphp事件机制如何实现

Thinkphp事件机制如何实现

Jun 02, 2023 pm 05:37 PM
thinkphp

    事件机制的实现有两种途径:通过监听、通过订阅

    一、通过监听

    1、创建监听类:在命令行模式下进入框架根目录执行

    php think make:listener <自定义的类名>

    例如:

    php think make:listener UserListener

    执行之后将在<框架根目录>applistener下生成UserListener这个类。

    2、配置监听:在<框架根目录>appevent.php这个文件的listen数组中配置UserListener这个类,如下:

    'listen'    => [
        'testEvent' => ['applistenerUserListener']
    ],

    3、触发监听:在你需要触发监听的地方加入如下代码

    event(&#39;testEvent&#39;);
    登录后复制

    注意:这里的参数testEvent即为事件名称,可随便定义,但必须要与在event.php文件里配置的键名一致。

    触发监听时你可以带上第二个参数。通过第二个参数你可以把任何数据传递到UserListener这个类中,也就是handle方法的参数(不明白啥意思的结合下面的完整代码理解)。

    4、处理监听逻辑:在UserListener类的handle方法中完成业务逻辑

    完整代码如下

    Other:一个用来测试的类

    <?php
    namespace app\controller;
    class Other
    {
        public function hello()
        {
            echo &#39;hello function&#39;;
        }
    }
    登录后复制

    Index:触发监听的类

    登录后复制

    UserListener:事件监听类

    <?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();
        }
    }
    登录后复制

    二、通过订阅

    1、创建订阅类

    在命令行模式下进入框架根目录执行

    php think make:subscribe <自定义的类名>

    例如:

    php think make:subscribe UserSubscribe

    执行之后将在<框架根目录>appsubscribe下生成UserSubscribe这个类。

    2、配置监听

    在<框架根目录>appevent.php这个文件的subscribe数组中配置UserSubscribe这个类,如下:

    'subscribe' => ['appsubscribeUserSubscribe'],

    注意:为了测试效果,要把上面配置的UserListener从listen数组删除掉

    3、触发监听

    跟第一种途径一样

    4、处理监听逻辑

    处理监听的逻辑又有两种方法,我称之为自动绑定和手动绑定。手动绑定和自动绑定是互斥的,只能二选一。

    4.1 自动绑定

    完成业务逻辑的ontestEvent方法应该被添加到UserSubscribe类中。添加的方法名不能随意定义,规则是事件名称前面加上on。因为我们在event.php里定义的事件名称是testEvent,所以方法名就是ontestEvent(注意大小写)。监听方法定义之后就自动与事件绑定,所以我称之为自动绑定。

    完整代码如下

    Other和Index类的代码跟第一种途径一样

    UserSubscribe:事件订阅类

    <?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 手动绑定

    首先,创建事件类,负责处理具体的业务逻辑。在命令行模式下进入框架根目录执行:

    php think make:event <自定义的类名>

    例如:

    php think make:event UserEvent

    执行之后将在<框架根目录>appevent下生成UserEvent这个类。

    再在该类中定义一个handle方法,该方法有一个传入参数。方法名和传入的参数名可以任意定义。具体的业务逻辑就可以放在handle方法里面处理。

    接下来,在UserSubscribe类里面新增subscribe方法,该方法需要接收一个Event对象作为参数。接着,在该函数里将事件监听绑定到UserEvent类的handle方法上。如下:

    $event->listen(&#39;testEvent&#39;, [app(&#39;app\event\UserEvent&#39;), &#39;handle&#39;]);
    登录后复制

    完整代码如下

    Other和Index类的代码跟第一种途径一样

    UserSubscribe:事件订阅类

    登录后复制

    UserEvent:事件处理类

    <?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();
        }
    }
    登录后复制

    以上是Thinkphp事件机制如何实现的详细内容。更多信息请关注PHP中文网其他相关文章!

    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    Video Face Swap

    Video Face Swap

    使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

    热工具

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Dreamweaver CS6

    Dreamweaver CS6

    视觉化网页开发工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)

    thinkphp项目怎么运行 thinkphp项目怎么运行 Apr 09, 2024 pm 05:33 PM

    运行 ThinkPHP 项目需要:安装 Composer;使用 Composer 创建项目;进入项目目录,执行 php bin/console serve;访问 http://localhost:8000 查看欢迎页面。

    thinkphp有几个版本 thinkphp有几个版本 Apr 09, 2024 pm 06:09 PM

    ThinkPHP 拥有多个版本,针对不同 PHP 版本而设计。主要版本包括 3.2、5.0、5.1 和 6.0,而次要版本用于修复 bug 和提供新功能。当前最新稳定版本为 ThinkPHP 6.0.16。在选择版本时,需考虑 PHP 版本、功能需求和社区支持。建议使用最新稳定版本以获得最佳性能和支持。

    thinkphp怎么运行 thinkphp怎么运行 Apr 09, 2024 pm 05:39 PM

    ThinkPHP Framework 的本地运行步骤:下载并解压 ThinkPHP Framework 到本地目录。创建虚拟主机(可选),指向 ThinkPHP 根目录。配置数据库连接参数。启动 Web 服务器。初始化 ThinkPHP 应用程序。访问 ThinkPHP 应用程序 URL 运行。

    laravel和thinkphp哪个好 laravel和thinkphp哪个好 Apr 09, 2024 pm 03:18 PM

    Laravel 和 ThinkPHP 框架的性能比较:ThinkPHP 性能通常优于 Laravel,专注于优化和缓存。Laravel 性能良好,但对于复杂应用程序,ThinkPHP 可能更适合。

    开发建议:如何利用ThinkPHP框架实现异步任务 开发建议:如何利用ThinkPHP框架实现异步任务 Nov 22, 2023 pm 12:01 PM

    《开发建议:如何利用ThinkPHP框架实现异步任务》随着互联网技术的迅猛发展,Web应用程序对于处理大量并发请求和复杂业务逻辑的需求也越来越高。为了提高系统的性能和用户体验,开发人员常常会考虑利用异步任务来执行一些耗时操作,比如发送邮件、处理文件上传、生成报表等。在PHP领域,ThinkPHP框架作为一款流行的开发框架,提供了一些便捷的方式来实现异步任务。

    thinkphp怎么安装 thinkphp怎么安装 Apr 09, 2024 pm 05:42 PM

    ThinkPHP 安装步骤:准备 PHP、Composer、MySQL 环境。使用 Composer 创建项目。安装 ThinkPHP 框架及依赖项。配置数据库连接。生成应用代码。启动应用并访问 http://localhost:8000。

    thinkphp性能怎么样 thinkphp性能怎么样 Apr 09, 2024 pm 05:24 PM

    ThinkPHP 是一款高性能的 PHP 框架,具备缓存机制、代码优化、并行处理和数据库优化等优势。官方性能测试显示,它每秒可处理超过 10,000 个请求,实际应用中被广泛用于京东商城、携程网等大型网站和企业系统。

    开发建议:如何利用ThinkPHP框架进行API开发 开发建议:如何利用ThinkPHP框架进行API开发 Nov 22, 2023 pm 05:18 PM

    开发建议:如何利用ThinkPHP框架进行API开发随着互联网的不断发展,API(ApplicationProgrammingInterface)的重要性也日益凸显。API是不同应用程序之间进行通信的桥梁,它可以实现数据共享、功能调用等操作,为开发者提供了相对简单和快速的开发方式。而ThinkPHP框架作为一款优秀的PHP开发框架,具有高效、可扩展和易用

    See all articles