Одной из неудобных задач при отладке для меня является поиск причины ошибки 403/404. Иногда она настолько неочевидна, что приходится пошагово проходить код xDebug-ом. Ещё одна «зона сумрака» при отладке – любая страница перед редиректом, например, обработка формы добавления/изменения контента. Тут тоже нужен или xDebug, или var_dump() с принудительным остановом после него.
«Расширенная отладка» версии 14.1.2 и выше значительно упрощает анализ таких моментов.
В настройках «Расширенной отладки» есть три опции для управления её выводом в подобных особых случаях:
Над информацией выводится предупреждение о том, что это страница с редиректом и указывается куда и с каким кодом должно было быть перенаправление. Можно кликнуть ссылку и перейти на страницу после редиректа как при обычной работе движка, а можно открыть её в новой вкладке браузера, если нужно одновременно видеть отладочную информацию до и после редиректа.
Данная функция до версии InstantCMS 2.14.1 включительно доступна только в «Полном» режиме отладки, так как использует отсутствующий хук ‘redirect’. Скачать патч для полного режима можно на странице описания режимов работы отладки
С версии InstantCMS 2.14.2 этот хук добавлен "в коробку", значит в этой версии и выше перехват редиректов будет работать и в стандартном режиме тоже.
Например, на скринах выше сразу видно, что обработчик ошибки «403» был вызван в методе actionContentItemView в файле /system/controllers/content/actions/item_view.php в строке 76. А ошибка «404» произошла в том же методе actionContentItemView в файле /system/controllers/content/actions/item_view.php в строке 85. (Это я генерировал тестовые ошибки для примера, в реальных файлах в этих строках таких вызовов нет).
При желании можно включить трассировку и увидеть полный стек вызовов, как это показано на скринах.
В окнах на JSON-ответах отладка не выводится.
«Расширенная отладка» версии 14.1.2 и выше значительно упрощает анализ таких моментов.
В настройках «Расширенной отладки» есть три опции для управления её выводом в подобных особых случаях:
Перехват редиректов
Начнём с наиболее интересной возможности – вывода отладочной информации при редиректах. Если опция «Показывать при редиректах» включена, то перед редиректом выполнение кода страницы останавливается, редирект не производится, а место него выводится отладочная информация как на обычной странице.Над информацией выводится предупреждение о том, что это страница с редиректом и указывается куда и с каким кодом должно было быть перенаправление. Можно кликнуть ссылку и перейти на страницу после редиректа как при обычной работе движка, а можно открыть её в новой вкладке браузера, если нужно одновременно видеть отладочную информацию до и после редиректа.
Данная функция до версии InstantCMS 2.14.1 включительно доступна только в «Полном» режиме отладки, так как использует отсутствующий хук ‘redirect’. Скачать патч для полного режима можно на странице описания режимов работы отладки
С версии InstantCMS 2.14.2 этот хук добавлен "в коробку", значит в этой версии и выше перехват редиректов будет работать и в стандартном режиме тоже.
Ошибки 403 и 404
Вывод отладочной информации на страницах ошибок 403 и 404 включается опцией «Показывать на страницах ошибок 403 (Доступ запрещён) и 404 (Не найдено)» в настройках. Работает и в стандартном, и в полном режимах отладки.Для вывода используется встроенный «в коробку» механизм отладки, а не хуки 'error_403' и 'error_404'. С одной стороны, это позволяет выводить отладку под привычными страницами об ошибках, а не над ними, как было бы при использовании хуков. С другой стороны, отладочная информация не будет выведена на нестандартных страницах этих ошибок, созданных через хуки, если после вывода страницы в вышеуказанных хуках выполнение кода останавливается.
Как найти причину, вызвавшую ошибку 403/404?
Очень легко. Достаточно в настройках отладки разрешить вывод в лог событий и в строке фильтра по имени события ввести ‘403’ или ‘404’.Например, на скринах выше сразу видно, что обработчик ошибки «403» был вызван в методе actionContentItemView в файле /system/controllers/content/actions/item_view.php в строке 76. А ошибка «404» произошла в том же методе actionContentItemView в файле /system/controllers/content/actions/item_view.php в строке 85. (Это я генерировал тестовые ошибки для примера, в реальных файлах в этих строках таких вызовов нет).
При желании можно включить трассировку и увидеть полный стек вызовов, как это показано на скринах.
Вывод в модальных окнах
При включении опции «Показывать в модальных окнах» во всех всплывающих окнах, получающих от сервера html-код, будет выводится информация отладки. Причём, из-за разной реализации этих окон в движке для фронта и бэкенда (стандартным и Ajax запросами, соответственно), на фронте сначала будет показано обычное содержимое окна, а под ним – отладка. В Админке наоборот, вверху будет выводится отладочная информация, а уже под ней – содержимое страницы модального окна. Функционал доступен и в стандартном, и в полном режимах отладки.Для более удобного просмотра информации в модальных окнах можно через «Инструменты разработчика» в браузере увеличивать ширину и высоту для <div class=”nyroModalCont”> и тега <iframe> внутри него.
В окнах на JSON-ответах отладка не выводится.