Bitrix Help
Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
Главная » Разработка Битрикс » D7 » EventManager в Битрикс: что это такое и как с ним работать

EventManager в Битрикс: что это такое и как с ним работать

Обновлено: 2026 • Раздел: D7
При разработке проектов на 1С-Битрикс часто возникает необходимость выполнять определенные действия при наступлении событий системы. Например, отправить уведомление после регистрации пользователя, изменить данные заказа перед сохранением или очистить кеш после обновления элемента инфоблока. Для решения подобных задач в Битрикс используется EventManager — современный механизм работы с событиями в D7 API. В этой статье подробно рассмотрим, что такое EventManager, как он работает и как создавать собственные обработчики событий с примерами кода.

Что такое EventManager

EventManager — это класс D7 API, предназначенный для регистрации и обработки событий системы. Класс находится в пространстве имен:
Bitrix\Main\EventManager
С помощью EventManager можно: Фактически EventManager реализует паттерн «Наблюдатель» (Observer).

Зачем использовать EventManager

Без событий разработчикам пришлось бы изменять ядро системы или вносить правки в сторонние модули. Использование EventManager позволяет: Поэтому в современных проектах D7 рекомендуется использовать именно события.

Подключение EventManager

Для работы необходимо подключить класс:
use Bitrix\Main\EventManager;
Получение экземпляра менеджера событий:
$eventManager = EventManager::getInstance();
Через этот объект выполняется регистрация обработчиков.

Регистрация обработчика события

Самый распространенный способ — метод addEventHandler(). Пример:
use Bitrix\Main\EventManager;

EventManager::getInstance()->addEventHandler(
    'main',
    'OnBeforeUserAdd',
    ['UserHandlers', 'onBeforeUserAdd']
);
Где:

Создание класса обработчиков

Обычно обработчики выносят в отдельный класс. Пример:
namespace Local\EventHandlers;

class UserHandlers
{
    public static function onBeforeUserAdd(&$fields)
    {
        $fields['LOGIN'] = trim($fields['LOGIN']);
    }
}
Такой подход делает код более структурированным и удобным для поддержки.

Где регистрировать события

Чаще всего регистрация выполняется в файле:
/local/php_interface/init.php
Пример:
use Bitrix\Main\EventManager;
use Local\EventHandlers\UserHandlers;

EventManager::getInstance()->addEventHandler(
    'main',
    'OnBeforeUserAdd',
    [UserHandlers::class, 'onBeforeUserAdd']
);
Для крупных проектов рекомендуется выполнять регистрацию в модуле.

События пользователей

Одни из наиболее популярных событий относятся к пользователям.

Перед созданием пользователя

OnBeforeUserAdd
Пример:
public static function onBeforeUserAdd(&$fields)
{
    $fields['LOGIN'] = strtolower($fields['LOGIN']);
}

После создания пользователя

OnAfterUserAdd
Пример отправки уведомления:
public static function onAfterUserAdd(&$fields)
{
    if ($fields['ID'])
    {
        // отправка уведомления
    }
}

Перед обновлением пользователя

OnBeforeUserUpdate
Позволяет изменить данные до сохранения.

События инфоблоков

При работе с контентом чаще всего используются события инфоблоков.

Перед добавлением элемента

OnBeforeIBlockElementAdd
Пример генерации символьного кода:
public static function onBeforeElementAdd(&$fields)
{
    if (empty($fields['CODE']))
    {
        $fields['CODE'] = translit($fields['NAME']);
    }
}

После добавления элемента

OnAfterIBlockElementAdd

Перед обновлением элемента

OnBeforeIBlockElementUpdate

После обновления элемента

OnAfterIBlockElementUpdate
Эти события активно используются в SEO-проектах и интернет-магазинах.

События заказов интернет-магазина

Для модуля интернет-магазина доступны собственные события. Например:
OnSaleOrderBeforeSaved
Пример:
public static function onBeforeOrderSave($event)
{
    $order = $event->getParameter('ENTITY');
}
Через событие можно:

Создание собственного события

EventManager позволяет создавать пользовательские события. Создание события:
use Bitrix\Main\Event;

$event = new Event(
    'local.module',
    'OnProductImported',
    [
        'PRODUCT_ID' => 15
    ]
);

$event->send();
Теперь любой модуль может подписаться на это событие.

Подписка на собственное событие

Регистрация обработчика:
EventManager::getInstance()->addEventHandler(
    'local.module',
    'OnProductImported',
    ['ProductHandlers', 'onImport']
);
Обработчик:
class ProductHandlers
{
    public static function onImport($event)
    {
        $productId = $event->getParameter('PRODUCT_ID');
    }
}
Таким образом можно организовать взаимодействие между модулями без жестких зависимостей.

Использование EventResult

Иногда необходимо вернуть данные обратно в событие. Для этого используется класс:
Bitrix\Main\EventResult
Пример:
use Bitrix\Main\EventResult;

return new EventResult(
    EventResult::SUCCESS,
    [
        'NAME' => 'Новое значение'
    ]
);
Этот механизм активно применяется внутри D7 ORM.

ORM-события DataManager

Каждая ORM-сущность поддерживает собственные события. Например:

Перед добавлением записи

onBeforeAdd

После добавления

onAfterAdd

Перед обновлением

onBeforeUpdate

После удаления

onAfterDelete
Пример:
public static function onBeforeAdd($event)
{
    $fields = $event->getParameter('fields');
}
Это позволяет реализовывать бизнес-логику непосредственно внутри ORM-сущностей.

Удаление обработчика

Если необходимо убрать обработчик:
$handlerId = EventManager::getInstance()->addEventHandler(
    'main',
    'OnBeforeUserAdd',
    ['UserHandlers', 'handler']
);

EventManager::getInstance()->removeEventHandler(
    'main',
    'OnBeforeUserAdd',
    $handlerId
);
Такой подход полезен при динамическом управлении событиями.

Типичные ошибки при работе с EventManager

Обработчик не вызывается

Следует проверить:

Класс не найден

Необходимо проверить автозагрузку:
Loader::registerAutoLoadClasses()
или настройки Composer.

Изменения не применяются

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

Рекомендации по использованию EventManager

Для крупных проектов рекомендуется: Это значительно упрощает поддержку проекта.

Заключение

EventManager в Битрикс является основным инструментом для работы с событиями D7 API. С его помощью можно подписываться на системные события, создавать собственные обработчики и строить расширяемую архитектуру без изменения ядра системы. Использование EventManager считается обязательной практикой при разработке современных модулей и сложных проектов на платформе 1С-Битрикс.
База знаний