maximaster / bitrix-event-dispatcher
兼容 EventDispatcherInterface 的事件处理器,用于注册通过 API 调用的 Bitrix 事件。
v0.1.1
2024-08-28 11:14 UTC
Requires
- php: ^8.2
- marcosh/lamphpda: ^3.0
- maximaster/bitrix-value-objects: ^1.0
- symfony/event-dispatcher: ^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.59
- psalm/phar: ^5.25
This package is auto-updated.
Last update: 2024-08-28 11:15:02 UTC
README
允许使用 symfony/event-dispatcher 来注册 Bitrix 事件的处理器,同时为每个事件创建一个自己的类。
为什么?
- 如果您的应用程序同时使用 Symfony 和 Bitrix,那么您已经使用了 event-dispatcher,并且使用统一的方式注册处理器会更加方便;
- 您希望处理类型化的对象事件,这些事件可以提供对数据的方便接口。
它如何工作
- 启动进程;
- 在过程中,有人请求 EventDispatcherInterface 服务;
- 容器创建此服务,并利用 Symfony 的标准功能(RegisterListenersPass)将监听器(addListener)添加到其中;
- 对于注册具有 \Maximaster\BitrixEvents\Contract\Event 接口的事件的 addListener 调用,还会调用额外的代码,该代码注册 Bitrix 事件处理器。这始终是 ForwardListener;
- Bitrix 触发事件;
- 进入 ForwardListener::__invoke;
- 从事件传入的参数中创建一个事件对象;
- 将此事件对象发送到 Symfony EventDispatcherInterface;
- Symfony 的标准功能处理并调用在步骤 3 中注册的事件处理程序;
限制和注意事项
- 即使您使用该库为同一事件注册了 100 个处理器,Bitrix 中也只会注册一个(ForwardListener)处理器。因此,虽然可以按顺序执行该库中的处理器,但无法相对于其他处理器排序执行;
- 如果旧类型的事件允许更改数据,那么除了在构造函数中通过引用接收数据外,还必须通过引用将数据保存到属性中,否则将无法进行编辑。
改进库
- 安装 devbox,或者自行构建通过 devbox 描述的环境(见
devbox.json
); - 确保没有错误输出(
devbox run lint
)。