maximaster/bitrix-event-dispatcher

兼容 EventDispatcherInterface 的事件处理器,用于注册通过 API 调用的 Bitrix 事件。

v0.1.1 2024-08-28 11:14 UTC

This package is auto-updated.

Last update: 2024-08-28 11:15:02 UTC


README

允许使用 symfony/event-dispatcher 来注册 Bitrix 事件的处理器,同时为每个事件创建一个自己的类。

为什么?

  1. 如果您的应用程序同时使用 Symfony 和 Bitrix,那么您已经使用了 event-dispatcher,并且使用统一的方式注册处理器会更加方便;
  2. 您希望处理类型化的对象事件,这些事件可以提供对数据的方便接口。

它如何工作

  1. 启动进程;
  2. 在过程中,有人请求 EventDispatcherInterface 服务;
  3. 容器创建此服务,并利用 Symfony 的标准功能(RegisterListenersPass)将监听器(addListener)添加到其中;
  4. 对于注册具有 \Maximaster\BitrixEvents\Contract\Event 接口的事件的 addListener 调用,还会调用额外的代码,该代码注册 Bitrix 事件处理器。这始终是 ForwardListener;
  5. Bitrix 触发事件;
  6. 进入 ForwardListener::__invoke;
  7. 从事件传入的参数中创建一个事件对象;
  8. 将此事件对象发送到 Symfony EventDispatcherInterface;
  9. Symfony 的标准功能处理并调用在步骤 3 中注册的事件处理程序;

限制和注意事项

  1. 即使您使用该库为同一事件注册了 100 个处理器,Bitrix 中也只会注册一个(ForwardListener)处理器。因此,虽然可以按顺序执行该库中的处理器,但无法相对于其他处理器排序执行;
  2. 如果旧类型的事件允许更改数据,那么除了在构造函数中通过引用接收数据外,还必须通过引用将数据保存到属性中,否则将无法进行编辑。

改进库

  • 安装 devbox,或者自行构建通过 devbox 描述的环境(见 devbox.json);
  • 确保没有错误输出(devbox run lint)。