Событие

Оригинальное название: event

Коротко

Сигнал о том, что в программе что-то произошло: пользователь нажал кнопку, заказ оплачен, файл загружен. Другой код может подписаться на событие и отреагировать на него.

Что такое «Событие»

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

Событие обычно несёт данные: какой элемент нажат, какой заказ оплачен, с какими полями создан товар. Обработчик, который на него реагирует, разобран в статье про обработчик события.

Где встречаются события

  • В браузере: click, submit, input, scroll. На них построена вся интерактивность страниц.
  • В CMS: WordPress вызывает хуки действий при сохранении записи или оформлении заказа, 1С-Битрикс — события модулей.
  • Между системами: сервис оплаты или CRM отправляет на сайт HTTP-запрос о произошедшем — это вебхук.
  • В очередях сообщений: событие кладут в брокер, а обработчики забирают его, когда готовы.

Пример: событие в 1С-Битрикс

Чтобы при добавлении элемента инфоблока выполнить своё действие, в /local/php_interface/init.php регистрируют обработчик:

use Bitrix\Main\EventManager;

EventManager::getInstance()->addEventHandler(
    'iblock',
    'OnAfterIBlockElementAdd',
    function (array &$fields) {
        // например, отправить уведомление о новом товаре
    }
);

Ядро и модуль инфоблоков не меняются, поэтому доработка переживает обновления. Такие задачи обычно входят в доработку сайта на 1С-Битрикс.

На что обратить внимание

Когда обработчиков много, становится трудно проследить, что именно происходит после одного действия. Тяжёлая работа в обработчике, например запрос к внешнему API, замедляет основное действие — пользователь ждёт, пока выполнятся все подписчики. Такие задачи лучше откладывать в очередь или агент. И ещё одна ловушка: обработчик, который сам вызывает то же событие, может уйти в бесконечный цикл.

Обновлено:

Все термины раздела «Backend»

Что будем искать? Например,Продвижение