事件是什么

事件相比较中间件的优势是事件比中间件更加精准定位(或者说粒度更细),并且更适合一些业务场景的扩展。例如,我们通常会遇到用户注册或者登录后需要做一系列操作,通过事件系统可以做到不侵入原有代码完成登录的操作扩展,降低系统的耦合性的同时,还能完成业务的需求。

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类,或者你可以指定完整类名生成。
namespace app\subscribe; class User public function onUserLogin($user) // UserLogin事件响应处理 public function onUserLogout($user) // UserLogout事件响应处理

3.自定义订阅

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

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');
                    事件是什么事件相比较中间件的优势是事件比中间件更加精准定位(或者说粒度更细),并且更适合一些业务场景的扩展。例如,我们通常会遇到用户注册或者登录后需要做一系列操作,通过事件系统可以做到不侵入原有代码完成登录的操作扩展,降低系统的耦合性的同时,还能完成业务的需求。TP6中事件的使用官网的解释,没有实例,这里简单的告诉大家如何使用,会使用之后再去发现更多操作1.事件监听命令行生成监听 php think make:listener UserLogin一般建议直接在事件定义文件(event.php
围观(2102)
只要进行了多表操作, 都应该开启事务, 如果每次遇到需要多表操作的方法都手动开事务是很累的…
所以本文使用 TP6中间件 + 订阅事件 + 模型事件 进行全局的事务.
首先安装 TP6, 文档地址: https://www.kancloud.cn/manual/thinkphp6_0/1037481 直接看文档就能安装.
安装好了 TP6 可以玩玩 TP6 的多应用模式. 文档: https
运行之后就会在app下生成一个文件路径是 app\evect\UserLogin.php
生成后还要去绑定一下事件类在app\evevt.php,讲实话 这个bind我注释了也一样可以触发事件,官方解释说
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
				
最近遇到个这样的需求:点赞排行榜,在规定的时间内(可能有好几天),谁获赞多谁就获胜。今天试了下redis消息订阅,发现还可以,写写具体过程吧。 1.安装redis,phpredis扩展 这些网上一搜一大把 2.搜了个redis类,新建类:app\common\controller\MyRedis,代码如下: <?php namespace app\common\con...
tp6redis是一个在ThinkPHP6框架下使用Redis的扩展包。通过这个扩展包,开发者可以方便地在自己的应用中使用Redis的各种功能和特性。下面,我将从八个方面来介绍tp6redis的用法。 1. 配置 tp6redis的配置主要包括两个部分:Redis服务器的连接配置和缓存配置。用户可以通过修改配置文件来进行相应的设置。 2. 连接Redis服务器 在tp6redis中,用户可以通过代码或配置文件的方式来连接到Redis服务器。连接成功后,便可以使用Redis的各种功能了。 3. 字符串操作 tp6redis提供了一系列方便的字符串操作方法,如设置、获取、删除字符串等。这些方法的使用非常简单,可以轻松地实现对字符串的存储和操作。 4. 列表操作 列表是Redis中的一种数据结构,tp6redis为此提供了一系列方便的列表操作方法。通过这些方法,用户可以高效地对列表进行增删查改等操作。 5. 哈希操作 Redis中的哈希是一种存储结构化数据的方式,tp6redis提供了一系列方便的哈希操作方法。使用这些方法,可以轻松地实现对哈希类型的数据进行存储和操作。 6. 集合操作 集合是Redis中的一种存储结构,tp6redis提供了一系列方便的集合操作方法。通过这些方法,用户可以高效地对集合进行增删查改等操作。 7. 有序集合操作 有序集合是Redis中的一种重要的存储结构,tp6redis为此提供了一系列方便的有序集合操作方法。使用这些方法,可以轻松地实现对有序集合类型的数据进行存储和操作。 8. 锁的实现 在多线程或者分布式环境下,锁的实现变得尤为重要。tp6redis提供了方便的锁机制,可以避免多线程或者分布式环境下的冲突和并发问题。 总之,tp6redis是一个非常方便和实用的Redis扩展包。使用tp6redis,用户可以轻松地实现Redis的各种功能,并在应用开发中发挥重要的作用。