11 KiB
Каталог системных событий
HookCatalog хранит стабильные точки расширения, их назначение, контекст и
источник. Модули могут добавлять определения через hook_definitions; runtime
также отмечает фактически вызванные динамические хуки.
Если в таблице не указано иное, контекст — App\Common\LifecycleEvent.
Система и модули
| Событие | Назначение |
|---|---|
system.initialize |
Системный runtime инициализирован. |
module.registered |
Descriptor зарегистрирован; контекст — строковый код. |
module.installed |
Установка завершена. |
module.updated |
Обновление завершено. |
module.enabled, module.disabled |
Состояние активности изменено. |
module.uninstalling, module.uninstalled |
До и после деинсталляции. |
Публичный HTTP-запрос
| Событие | Назначение |
|---|---|
frontend.request.received |
Получен публичный запрос. |
frontend.runtime.ready |
Конфигурация и публичные модули загружены. |
frontend.route.resolved |
Определён маршрут и контекст страницы. |
frontend.response.rendering |
Ответ подготовлен перед финальной выдачей. |
frontend.response.rendered |
Финальный HTML сформирован. |
Документы и рубрики
| Событие | Назначение |
|---|---|
content.document.loading, content.document.loaded |
До и после чтения документа. |
content.document.saving, content.document.saved |
До и после сохранения; DocumentSaveEvent. |
content.document.created, content.document.updated |
Создание/обновление; DocumentSaveEvent. |
content.document.published, content.document.unpublished |
Смена публикации; DocumentSaveEvent. |
content.document.deleting, content.document.deleted |
До и после удаления. |
content.document.snapshot_built |
Итоговый JSON-снимок перестроен. |
content.rubric.loading, content.rubric.loaded |
До и после чтения рубрики. |
content.rubric.schema_impact |
Дополняет список зависимостей перед восстановлением схемы рубрики; контекст — массив. |
Фильтр content.rubric.schema_impact получает rubric_id, field_ids, описания
полей в fields и массив items. Модуль добавляет в items записи с ключами
key, title, meta, details и возвращает весь контекст. Анализ ничего не
изменяет в БД и не должен выполнять тяжёлые пересчёты: его результат входит в
fingerprint подтверждения восстановления.
Сам движок всегда добавляет в анализ JSON API документов: его чтение и запись используют alias, ID, тип и структуру значения поля. Для запросов отдельно проверяются условия, сортировка, шаблонные теги и контракт результата. Из установленных подсистем учитываются каталоги, варианты товаров и товарные фиды.
Запросы, шаблоны и блоки
| Событие | Назначение |
|---|---|
content.query.loading, content.query.loaded |
Чтение AVE-запроса. |
content.query.rendering, content.query.rendered |
Рендер списка/запроса. |
content.template.loading, content.template.loaded |
Чтение шаблона страницы. |
content.template.rendering, content.template.rendered |
Выполнение шаблона страницы. |
content.block.rendering, content.block.rendered |
Совместимый вызов блока через старый тег block. |
content.sysblock.loading, content.sysblock.loaded |
Чтение блока из единого реестра. |
content.sysblock.rendering, content.sysblock.rendered |
Основной цикл рендера блока. |
Поля
| Событие | Назначение |
|---|---|
content.field.registry |
Реестр типов собран. |
content.field.normalizing, content.field.normalized |
Нормализация значения. |
content.field.validating, content.field.validated |
Серверная валидация. |
content.field.saving, content.field.saved |
Запись значения. |
content.field.rendering, content.field.rendered |
Публичный вывод. |
Точный набор ключей описан в Хуках полей.
Пользователи
| Событие | Назначение |
|---|---|
auth.user.registering, auth.user.registered |
До и после регистрации публичного пользователя. |
auth.user.authenticated |
Успешный вход. |
auth.user.logged_out |
Выход. |
auth.phone.code_sent |
Код передан SMS-провайдеру; доступны код провайдера и маскированный телефон, но не сам код. |
Commerce
Commerce-события доступны, когда установлен соответствующий пакет.
| Событие | Назначение |
|---|---|
commerce.cart.changed |
Состав корзины изменён. |
commerce.order.creating, commerce.order.created |
До и после создания заказа. |
commerce.order.status_changed |
Статус заказа изменён. |
commerce.payment.completed |
Платёж подтверждён. |
commerce.delivery.quoted |
Получен расчёт доставки. |
Исходящие HTTP-запросы
| Событие | Назначение |
|---|---|
http.outbound.requesting |
Общий клиент подготовил исходящий запрос. |
http.outbound.responded |
Удалённый сервис успешно ответил. |
http.outbound.failed |
Соединение, проверка адреса или ответ завершились ошибкой. |
В событиях доступны метод, схема и хост без пути и параметров, размер, HTTP-статус, длительность и код источника. Тела запросов и ответов, заголовки, ключи, подписи и персональные данные не передаются.
Товарный каталог
| Фильтр | Назначение |
|---|---|
catalog.product_cards.rendering |
Передаёт место вывода, ID товаров и исходный HTML. Обработчик может вернуть центральные карточки и handled=true. |
Контекст фильтра: context, product_ids, items, html, handled. Товарный
модуль захватывает вывод только для контекста, явно переведённого в режим
центральной карточки. Если хотя бы один документ отсутствует в товарном индексе,
исходный HTML сохраняется.
Кеш
| Событие | Назначение |
|---|---|
cache.invalidating |
Перед удалением ключа, тега или всего кеша. |
cache.invalidated |
После завершения очистки. |
Загрузка файлов
Эти хуки используют массив, а не LifecycleEvent.
| Событие | Назначение |
|---|---|
file.upload.validating |
Фильтр до сохранения. Получает allowed, reason, temporary_path, original_name, size, destination, source. |
file.upload.stored |
Файл сохранён; получает итоговый path, исходное имя, размер и источник. |
Ядро всегда отклоняет служебные файлы сервера, неоднозначные имена, исполняемые
и активные веб-форматы, включая SVG. Для известных источников также проверяются
допустимые расширения и сигнатуры содержимого. Модуль может дополнительно
ужесточить правила: для этого
фильтр возвращает весь массив с allowed=false и понятным текстом в reason.
Вернуть ядром запрещённый формат через hook нельзя.
Как узнать фактический контекст
Каталог описывает класс контекста и назначение события. Конкретные ключи
LifecycleEvent::data() зависят от операции. На тестовом стенде включите
публичный отладчик, откройте вкладку Хуки и сопоставьте событие с вкладками
документа, SQL и timeline. Не выводите весь контекст посетителю и не логируйте
секреты авторизации.
Обращения по товарам
После создания уведомления о поступлении, предзаказа или запроса цены модуль
products вызывает catalog.product.demand.created. Событие подходит для
подключения CRM, мессенджера или собственного канала уведомлений.
Контекст содержит type, document_id и public_user_id. Контактные данные
намеренно не передаются в публичный каталог hook-ов: модуль с соответствующими
правами читает полную запись через DemandRepository.
Личный кабинет расширяется фильтрами auth.account.links и
auth.account.overview. Первый добавляет ссылки, второй — краткие карточки на
обзорную страницу.