关于php:从binswoft开始阅读Swoft框架源码七EventProcessor事件处理器

5次阅读

共计 837 个字符,预计需要花费 3 分钟才能阅读完成。

通过 Bean 处理器后, 咱们业务中要用到的组件大多都被放在了容器内. 咱们要用到的时候能够从容器内获取这个 bean 对象, 这让咱们的工作轻松了不少.

先看事件处理器的入口办法:

public function handle(): bool
{if (!$this->application->beforeEvent()) {CLog::warning('Stop event processor by beforeEvent return false');
         return false; 
     }
     // 从容器内获取曾经加载的事件管理器
     /** @var EventManager $eventManager */
     $eventManager = bean('eventManager');
     // 将 ListenerRegister 保留的事件监听和事件订阅实例保留到事件管理器上
     // count1 是监听实例的数量,count2 是订阅实例的数量
     [$count1, $count2] = ListenerRegister::register($eventManager);
     // 打印执行后果到控制台
     CLog::info('Event manager initialized(%d listener, %d subscriber)', $count1, $count2);
     // Trigger a app init event
     // 触发 APP 初始化实现事件
     Swoft::trigger(SwoftEvent::APP_INIT_COMPLETE);
     // 完结事件处理器工作
     return $this->application->afterEvent();}

总结:

 因为事件管理器已被加载到 bean 容器中, 所以以后处理器工作很少, 只是将收集到的监听者和订阅者对象移交给事件管理器对立治理.
另外, 在事件处理器调用前要想增加事件监听, 要通过 Swoft\Event\ListenerRegister 的 addListener 或 addSubscriber 办法来增加.
事件管理器, 前面可能会出独自章节进行剖析.
正文完
 0