4.0 KiB
Отладка и надёжность хуков
Вкладка публичного отладчика
Для авторизованного администратора публичный Debug Toolbar показывает вкладку Хуки. В ней видны:
- имя и тип вызова (
action/filter); - обработчик и priority;
- длительность;
- статус и исключение;
- количество вызовов и вложенность.
Trace включается только вместе с защищённым отладчиком и ограничен 1500 обработчиками на запрос. Превышение отображается как отброшенные записи, чтобы сама диагностика не исчерпала память.
Включение панели и вывод собственных значений через Debug::panel() описаны в
разделе «Публичная отладка».
Диагностика обработчика
- Убедитесь, что модуль установлен и включён.
- Проверьте, в какой секции объявлен hook:
admin,publicили верхний уровень. - Проверьте имя события и namespace класса.
- Посмотрите вкладку Хуки: был ли вызов и какой обработчик выполнился.
- Сопоставьте время с SQL/HTTP/timeline.
- Проверьте фильтрацию по type/rubric/source внутри обработчика.
Hooks::exists(), has() и current() подходят для локальной диагностики.
Hooks::debug() печатает HTML и не должен использоваться в production-коде;
для структурированных значений используйте защищённую панель отладки.
Исключения
Обычный Hooks::action() и filter() пробрасывают исключение вызывающему коду.
Поведение конкретной lifecycle-точки может быть строже:
- ошибка/
fail()вcontent.document.savingотклоняет сохранение; - исключение в after-событии документа журналируется, но commit не откатывается;
- ошибка в рендеринге может остановить публичный ответ.
Ловите только ожидаемые ошибки. Не скрывайте исключение пустым catch: запишите
контекст без секретов и дайте операции контролируемый статус повтора.
Производительность
- Не выполняйте одинаковый SQL на каждое поле или элемент списка.
- Не очищайте весь кеш, если известен тег или ключ сущности.
- Не вызывайте внешний HTTP в транзакции сохранения.
- Для интеграций используйте outbox, идемпотентный ключ и ограниченный web-runner.
- Обработчик должен быстро завершаться, если событие относится не к его рубрике, типу или операции.
Безопасность
Контекст может содержать пользовательские данные, HTML, email и служебные идентификаторы. Не передавайте его целиком внешнему сервису, не записывайте пароли/токены в лог и экранируйте результат, если hook возвращает HTML.