Files
ave-cms/help/hooks/debugging.md
T
2026-07-27 12:58:44 +03:00

4.0 KiB
Raw Blame History

Отладка и надёжность хуков

К разделу «Хуки и события»

Вкладка публичного отладчика

Для авторизованного администратора публичный Debug Toolbar показывает вкладку Хуки. В ней видны:

  • имя и тип вызова (action/filter);
  • обработчик и priority;
  • длительность;
  • статус и исключение;
  • количество вызовов и вложенность.

Trace включается только вместе с защищённым отладчиком и ограничен 1500 обработчиками на запрос. Превышение отображается как отброшенные записи, чтобы сама диагностика не исчерпала память.

Включение панели и вывод собственных значений через Debug::panel() описаны в разделе «Публичная отладка».

Диагностика обработчика

  1. Убедитесь, что модуль установлен и включён.
  2. Проверьте, в какой секции объявлен hook: admin, public или верхний уровень.
  3. Проверьте имя события и namespace класса.
  4. Посмотрите вкладку Хуки: был ли вызов и какой обработчик выполнился.
  5. Сопоставьте время с SQL/HTTP/timeline.
  6. Проверьте фильтрацию по 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.