Перейти к содержимому

События на практике - обработчики и журнал событий

События - подтема на 14 вопросов из собранных. Здесь собраны решения по обработчикам и по журналу событий сайта.

Что общего у этих задач

Событие срабатывает там, где его вызвали. Модуль объявляет свои точки расширения сам, и обработчик получает управление ровно в этих местах. Создание записи мимо API модуля - прямым запросом к базе или чужим кодом - событие не породит.

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

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

Обработчик выполняется внутри чужой операции. Всё, что он делает медленно или ненадёжно, замедляет и ломает сохранение заказа или товара, а виноватой выглядит платформа.

Решения подтемы

Частые вопросы

Где регистрировать обработчик?

Разовый - в файле инициализации сайта, постоянный - при установке модуля. Первый действует на текущий запрос, второй хранится в базе и снимается вместе с модулем.

Почему обработчик не срабатывает?

Чаще всего действие идёт мимо API модуля либо перепутано событие «до» и «после». Событие вызывает код модуля, а не сама база данных.

Как отменить сохранение из обработчика?

Только в событии «до»: обработчик возвращает признак отмены или бросает исключение. В событии «после» действие уже выполнено.

Пишет ли журнал срабатывания обработчиков?

Нет, это разные механизмы. В журнал попадают действия пользователей и системные происшествия, а свои записи туда добавляют явным вызовом.

Связанные темы

Первоисточники