webman 事件库 webman-event
事件相比较中间件的优势是事件比中间件更加精准定位(或者说粒度更细),并且更适合一些业务场景的扩展。例如,我们通常会遇到用户注册或者登录后需要做一系列操作,通过事件系统可以做到不侵入原有代码完成登录的操作扩展,降低系统的耦合性的同时,也降低了BUG的可能性。
项目地址
https://github.com/Tinywan/webman-permission
依赖
安装
```shell script composer require tinywan/webman-event
## 配置事件配置文件 `config/event.php` 内容如下```phpreturn [// 事件监听'listener' => [],// 事件订阅器'subscriber' => [],];
进程启动配置
打开 config/bootstrap.php,加入如下配置:
return [// 这里省略了其它配置 ...webman\event\EventManager::class,];
快速开始
定义事件
事件类 LogErrorWriteEvent.php
declare(strict_types=1);namespace extend\event;use Symfony\Contracts\EventDispatcher\Event;class LogErrorWriteEvent extends Event{const NAME = 'log.error.write'; // 事件名,事件的唯一标识/** @var array */public array $log;public function __construct(array $log){$this->log = $log;}public function handle(){return $this->log;}}
监听事件
return [// 事件监听'listener' => [\extend\event\LogErrorWriteEvent::NAME => \extend\event\LogErrorWriteEvent::class,],];
订阅事件
订阅类 LoggerSubscriber.php
namespace extend\event\subscriber;use extend\event\LogErrorWriteEvent;use Symfony\Component\EventDispatcher\EventSubscriberInterface;class LoggerSubscriber implements EventSubscriberInterface{/*** @desc: 方法描述* @return array|string[]*/public static function getSubscribedEvents(){return [LogErrorWriteEvent::NAME => 'onLogErrorWrite',];}/*** @desc: 触发事件* @param LogErrorWriteEvent $event*/public function onLogErrorWrite(LogErrorWriteEvent $event){// 一些具体的业务逻辑var_dump($event->handle());}}
事件订阅
return [// 事件订阅'subscriber' => [\extend\event\subscriber\LoggerSubscriber::class,],];
事件触发器
触发 LogErrorWriteEvent 事件。
$error = ['errorMessage' => '错误消息','errorCode' => 500];EventManager::trigger(new LogErrorWriteEvent($error),LogErrorWriteEvent::NAME);
执行结果

License
This project is licensed under the Apache 2.0 license.
