TP6 事件

记录:

事件官方定义要点:

  • 事件本身可以是一个类,并且可以更好的支持事件订阅者
  • 事件相比较中间件的优势是事件比中间件更加精准定位(或者说粒度更细),并且更适合一些业务场景的扩展,做到不侵入原有代码完成操作扩展,降低系统的耦合性的同时,也降低了BUG的可能性。
  • 事件系统的所有操作都通过think\facade\Event类进行静态调用
  • 事件机制不能关闭
  • 事件系统使用了观察者模式,提供了解耦应用的更好方式

1,定义事件

php think make:event UserLogin

2,事件绑定

  • 动态绑定
//比如可以在控制器中,动态绑定某事件
Event::bind(['UserLogin' => 'app\event\UserLogin']);
  • event.php事件中批量绑定
return [
    'bind'    =>    [
        'UserLogin' => 'app\event\UserLogin',
        // 更多事件绑定
    ],
];

3,事件监听

  • 手动注册一个事件监听
//手动注册一个事件监听
Event::listen('UserLogin',function($user){
    dump($user);
});
  • 使用监听类来执行监听

       a/ 创建事件监听类:php think make:listener UserLogin。事件监听类只需要定义一个handle方法,支持依赖注入。在handle方法中如果返回了false,则表示监听中止,将不再执行该事件后面的监听。

        b/ 在event.php事件中定义对应事件的监听。

return [
    'bind'    =>    [
        'UserLogin' => 'app\event\UserLogin',
        // 更多事件绑定
    ],
    'listen'  =>    [
        'UserLogin'    =>    ['app\listener\UserLogin'],
        // 更多事件监听
    ],
];
  • 通过事件订阅机制进行多个事件监听

      a/ 命令行生成一个事件订阅者类:php think make:subscribe User。在事件订阅类中可以添加不同事件的监听方法,监听事件的方法命名规范是on+事件标识(驼峰命名),如果希望统一添加事件前缀标识,可以定义eventPrefix属性。

TP6 事件_第1张图片

4,事件触发

// user是当前登录用户对象实例
event('UserLogin', $user);

 或

// 触发UserLogin事件 用于执行用户登录后的一系列操作
Event::trigger('UserLogin',$user);

补:对事件的理解还在使用中,后续会继续完善。

 

 

你可能感兴趣的:(tp6)