多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 事件订阅 可以通过事件订阅机制,在一个监听器中监听多个事件,例如通过命令行生成一个事件订阅者类, ~~~ php think make:subscribe SubscribeUser ~~~ 默认会生成`app\subscribe\SubscribeUser`类。 然后你可以在事件订阅类中添加不同事件的监听方法。监听事件的方法命名规范是`on`+事件标识(驼峰命名)。如果希望自定义订阅方式(或者方法规范),可以定义`subscribe`方法实现。 ~~~ <?php namespace app\subscribe; use think\Event; class User { public function onUserLogin($user) { // UserLogin事件响应处理 print_r($user); } public function onUserLogout($user) { // UserLogout事件响应处理 print_r($user); } public function subscribe(Event $event) { $event->listen('UserLogin', [$this,'onUserLogin']); $event->listen('UserLogout',[$this,'onUserLogout']); } } ~~~ 然后在事件定义文件注册事件订阅者 ~~~ return [ 'bind' => [ // 更多事件绑定 ], 'listen' => [ // 更多事件监听 ], 'subscribe' => [ 'app\subscribe\User', // 更多事件订阅 ], ]; ~~~ 最后在控制器中,就可以使用了. ~~~ <?php declare (strict_types = 1); namespace app\test\controller; use think\facade\Event; class User { public function login() { Event::trigger('UserLogin', ['name' => 'pat']); } public function logout() { Event::trigger('UserLogout', ['name' => 'pat']); } } ~~~ ## 分离监听事件 `php think make:listener UserLogin` ~~~ <?php declare (strict_types = 1); namespace app\listener; class UserLogin { /** * 事件监听处理 * * @return mixed */ public function handle($user) { print_r($user); } } ~~~ `php think make:listener UserLogout` ~~~ <?php declare (strict_types = 1); namespace app\listener; class UserLogout { /** * 事件监听处理 * * @return mixed */ public function handle($user) { print_r($user); } } ~~~ 然后在事件定义文件注册事件订阅者 ~~~ return [ 'bind' => [ // 更多事件绑定 ], 'listen' => [ // 此处多个倾听者相当于下方的一个 subscribe, 相当于分文件编码 'UserLogin' => ['app\listener\UserLogin'], 'UserLogout' => ['app\listener\UserLogout'], // 更多事件监听 ], 'subscribe' => [ // 'app\subscribe\User', // 更多事件订阅 ], ]; ~~~