本文为大家带来ThinkPHP相关知识,主要介绍事件绑定、监控、订阅等相关问题。 与中间件相比,事件的优势在于事件比中间件定位更准确。 一起来看看吧,希望对大家有所帮助。

完全掌握thinkphp的事件绑定、监控和订阅

什么是事件
事件相对于中间件的优势在于事件比中间件更精确(或者更细粒度),更适合一些业务场景的扩展。 比如我们通常会遇到用户注册或登录后的一系列操作。 通过事件系统,我们可以在不侵入原有代码的情况下,实现登录操作的扩展,减少系统的耦合,满足业务需求。

TP6 中事件的使用
官网上的解释,没有例子,这里简单的告诉你怎么用,用了之后你会发现更多的操作。

1.事件监控

命令行生成监听: php think make:listener UserLogin

一般建议直接在事件定义文件(event.php)中定义对应事件的监听。

return [
    'bind'    =>    [
        'UserLogin' => 'app\event\UserLogin',
        // 更多事件绑定
    ],
    'listen'  =>    [
        'UserLogin'    =>    ['app\listener\UserLogin'],
        // 更多事件监听
    ],
];

 

2.事件订阅

命令行php think make:subscribe User

默认会生成app\subscribe\User类,或者你可以指定完整类名生成。

<?php
namespace app\subscribe;
 
class User
{
    public function onUserLogin($user)
    {
        // UserLogin事件响应处理
    }
 
    public function onUserLogout($user)
    {
        // UserLogout事件响应处理
    }
}

 

3.自定义订阅

如果希望自定义订阅方式(或者方法规范),可以定义subscribe方法实现。

<?php
namespace app\subscribe;
 
use think\Event;
 
class User
{
    public function onUserLogin($user)
    {
        // UserLogin事件响应处理
    }
 
    public function onUserLogout($user)
    {
        // UserLogout事件响应处理
    }
 
    public function subscribe(Event $event)
    {
        $event->listen('UserLogin', [$this,'onUserLogin']);
        $event->listen('UserLogout',[$this,'onUserLogout']);
    }
}

然后在事件定义文件注册事件订阅者

return [
    'bind'    =>    [
        'UserLogin' => 'app\event\UserLogin',
        // 更多事件绑定
    ],
    'listen'  =>    [
        'UserLogin'    =>    ['app\listener\UserLogin'],
        // 更多事件监听
    ],
    'subscribe'    =>    [
       'app\subscribe\User',
        // 更多事件订阅
    ],
];

 

事件触发

// 触发UserLogin事件 用于执行用户登录后的一系列操作
Event::trigger('UserLogin');
或者使用助手函数
event('UserLogin');
1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!