🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 事件的触发 - 事件系统使用了观察者模式,更好的方式解耦应用。在你需要的位置添加事件触发代码`$this->app->event->trigger('UserLogin')` - 事件类可通过命令行快速生成`php think make:event UserLogin`,默认会生成`app\event\UserLogin`事件类,也可以指定完整的类名生成 - 事件系统不依赖事件类,一般没有额外的需求,仅通过事件标识就可以使用事件系统,省去定义事件类的麻烦 - 通过event的trigger方法的第二个参数,可以传递参数到事件监听中。 ### 事件的监听 - 可手动注册事件监听 ``` // 闭包函数来监听事件 $this->app->event->listen('UserLogin', function($user) { .... }) // 事件监听类来监听事件 $this->app->event->listen('UserLogin', 'app\listener\UserLogin') ``` - 在事件的定义文件中注册事件监听`event.php`文件的`listen`属性 ``` return [ 'bind' => [...] 'listen' => [ 'UserLogin' => ['app\listen\UserLogin', ...], ] ]; ``` - 可通过命令行快速生成事件监听`php think make:listener UserLogin` - 事件监听类只需要定义一个handle方法。如果handle返回false,则表示终止,将不再执行该事件后面的监听。 ### 事件的订阅 - 通过事件订阅机制,可在一个监听器中监听多个事件。 - 通过命令行快速生成事件订阅类`php think make:subscribe User` - 可在事件订阅类中添加不同的事件的监听方法,事件监听的方法命名规范是on+事件标识,驼峰命名。 - 在事件定义文件中注册事件的订阅`event.php`文件的`subscribe`属性 - 可动态注册`$this->app->event->subscribe('app\subscribe\User')`