Позволяет использовать 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
).