maximaster/bitrix-event-dispatcher
最新稳定版本:v0.1.1
Composer 安装命令:
composer require maximaster/bitrix-event-dispatcher
包简介
EventDispatcherInterface-совместимый диспетчер для регистрации обработки событий вызываемых через API Битрикс.
README 文档
README
Позволяет использовать symfony/event-dispatcher для регистрации обработчиков на события Битрикс, создавая при этом под каждое событие собственный класс.
Зачем?
- если ваше приложение использует и Symfony и Битрикс, то вы уже используете event-dispatcher и будет удобнее регистрировать обработчики единым образом;
- вы хотите работать с типизированными объектами событий, которые смогут предоставить удобный интерфейс к своим данным.
Как это работает
- запускается хит;
- в процессе кто-то требует сервис EventDispatcherInterface;
- контейнер создаёт этот сервис и благодаря штатному функционалу Symfony (RegisterListenersPass) добавляет в него слушателей (addListener);
- для тех вызовов addListener, которые регистрируют событие с интерфейсом \Maximaster\BitrixEvents\Contract\Event дополнительно вызывается код, который регистрирует обработчик события Битрикс. Это всегда ForwardListener
- Битрикс вызывает событие
- приходим в ForwardListener::__invoke;
- из аргументов пришедших в событие создаётся объект события из этого пакета;
- этот объект события отправляется в Symfony EventDispatcherInterface;
- штатный функционал Symfony отрабатывает и вызывает обработку события, которое было зарегистрировано на шаге 3.
Ограничения и нюансы
- Даже если вы регистрируете 100 обработчиков на одно и то же событие с помощью библиотеки, то в Битриксе будет зарегистрирован лишь один (ForwardListener) обработчик. Как следствие, отсортировать порядок выполнения обработчиков, которые сделаны в рамках этой библиотеки, однако, отсортировать их выполнения относительно других обработчиков невозможно;
- Если событие старого типа позволяет менять данные, то важно не только принимать в конструкторе данные по ссылке, но и по ссылке сохранять эти данные в свойство, иначе редактирование будет невозможно.
Доработка библиотеки
- установите devbox, либо самостоятельно
воспроизведите окружение, которое через него описано (см.
devbox.json); - убедитесь, что линтеры не выдают ошибок (
devbox run lint).
统计信息
- 总下载量: 33
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2024-07-15