D7 и событияОбновлено: 23.10.2026 11:25:05

События D7 в 1С-Битрикс: EventManager и обработчики

Как зарегистрировать обработчик EventManager, получить параметры события, вернуть EventResult и правильно удалить регистрацию при деинсталляции.

Время чтения: 11 мин.Уровень: Средний

Системные требования

Нужны тестовая копия проекта, доступ разработчика или администратора и резервная копия перед изменением рабочего кода.

Смотреть системные требования

1. Выберите событие и контракт

Найдите событие в официальной документации модуля и проверьте, когда оно вызывается: до операции, после неё или при формировании результата. Зафиксируйте тип параметров и допустимый ответ.

Не подменяйте событием бизнес-процесс, если действие должно иметь очередь, повторы и отдельный журнал.

EventManager

Официальный справочник регистрации, удаления и отправки событий D7.

Скачать

2. Добавьте временный обработчик

Для обработчика на время текущего запроса используйте singleton:

use Bitrix\Main\EventManager;

EventManager::getInstance()->addEventHandler(
  "main", "OnAfterUserAdd",
  [UserEvents::class, "afterAdd"]
);

Размещайте класс в автозагружаемом пространстве имён проекта.

Совет

Обработчик должен быть быстрым и повторяемым. Не выполняйте в событии долгий внешний запрос без тайм-аута и очереди: это замедляет основную операцию пользователя.

3. Зарегистрируйте обработчик модуля

Постоянную регистрацию выполняйте при установке модуля через registerEventHandler(), передавая модуль-источник, событие, ID своего модуля, класс и метод.

При удалении модуля симметрично вызовите unRegisterEventHandler(). Иначе система сохранит ссылку на отсутствующий класс.

4. Прочитайте параметры и верните результат

Современный обработчик получает объект Bitrix\Main\Event:

public static function handle(Event $event): EventResult
{
  $fields = $event->getParameters();
  return new EventResult(EventResult::SUCCESS, ["checked" => true]);
}

Для старых событий с позиционными аргументами используйте compatible-методы только по документации.

5. Обеспечьте безопасное выполнение

Проверяйте наличие обязательных полей, избегайте рекурсивного повторного запуска события и журналируйте только технические идентификаторы. Исключения обрабатывайте там, где ошибка не должна ломать основную операцию.

Напишите тесты для повторного вызова и сценария, когда внешний сервис недоступен.

Была ли эта статья полезной?

Спасибо за ваш отзыв!