TP6事件机制的一点应用心得

浏览:15532 发布日期:2019/04/24 分类:ThinkPHP6专区
6.0出来了,文档也出来了,可是看了文档后还是一脸懵逼...甚至看了好几遍,总算有了一点头绪。
先来看下群里大佬以及老大流年的一些指点
第1,需要声明一个UserLogin事件,
第2,注册一个这个事件,
第3,还有可能需要绑定这个事件,
第4,这个事件需要触发,
最后一个很关键,如果是自定义事件,必须要有触发位置。
我建议想了解事件的朋友看几遍文档,接下来和我一起操作。
场景是admin应用下的登录页面,我们需要登录成功后进行一些操作。
1、首先找到要触发的地方,下一个触发事件,我这里模拟传过去一个数据
$admin = Admin::find(1);
event('AdminLogin', $admin);
2、listener\AdminLogin.php 是时间监听类,用于处理监听到后的一些数据。<?php

namespace app\admin\listener;

class AdminLogin
{
    public function handle($admin)
    {
        halt($admin);
        // 事件监听处理
    }
}
3、定义对应事件的监听
admin\event.php 中return [
    'bind'    =>    [
        // 更多事件绑定
    ],
    'listen'  =>    [
        'AdminLogin'    =>    ['app\admin\listener\AdminLogin'],
        // 更多事件监听
    ],
];
如果顺利的话,会打印出传递过来的数据,就说明没有问题了,剩下的逻辑就自己写吧。
注意
官方文档中有这么一句话
ThinkPHP的事件系统不依赖事件类,如果没有额外的需求,仅通过事件标识也可以使用,省去定义事件类的麻烦。
如果你没有定义事件类的话,则无需绑定。对于大部分的场景,可能确实不需要定义事件类。
你可以在event方法中传入一个事件参数
// user是当前登录用户对象实例
event('UserLogin', $user);

----------------
所以我并没有进行绑定时间,也没有定义事件类。这里其实我并不是特别理解事件类存在的意义是什么,文档中说“我们可以给事件类添加方法”,但是我不知道如何调用这些方法,以及什么场景下需要这个事件类以及方法。
-
以上是对TP6事件机制的一点心得和体会,写的不对的地方还望多多包涵,多多指点。

另外:小弟最近在搞一个TP6的开源项目,希望多多支持,多多交流,一起学习进步。
https://gitee.com/ruoshuiyx/tp6
最佳答案
评论( 相关
后面还有条评论,点击查看>>