Console — интерактивная отладка MODX

Console появилась как простой способ выполнять PHP-код непосредственно внутри авторизованного MODX Manager и сразу видеть результат. Компонент был опубликован ещё в 2011 году и превратил административную часть MODX в своего рода интерактивную рабочую среду для разработчика.

Практическая ценность Console особенно проявляется при работе с xPDO и processors. Вместо создания временного сниппета или отдельного PHP-файла разработчик может выполнить запрос, получить объект, вызвать processor и посмотреть его фактический ответ прямо в runtime конкретного сайта.

Это хорошо сочетается с архитектурой modxSite, где прикладные операции строятся вокруг processors. Console позволяет проверять эти операции независимо от frontend: увидеть входные данные, ответ, ошибки и поведение текущей версии системы.

Поэтому спустя много лет Console остаётся полезной и при модернизации legacy-проектов. Когда новый frontend создаётся поверх старого backend, она помогает сначала проверить реальное поведение существующей логики, а уже затем строить вокруг неё новый интеграционный слой.

История сохранения и загрузки кода

Функции сохранения кода Console в файлы и загрузки из файлов появились не в исходной версии компонента. 31 августа 2015 года Сергей Шлоков опубликовал заметку «[Console] Сохраняем код в файл». В своём форке он реализовал сохранение текущего кода в файл и последующую загрузку файла обратно в Console.

В той же публикации Сергей отдельно отметил, что ранее благодаря Илье Уткину Console уже умела сохранять код в $_SESSION. Это была отдельная, более ранняя возможность и к импорту/экспорту через файлы она напрямую не относилась.

1 сентября 2015 года в комментариях к этой заметке Максим (pathologic) предложил добавить аналогичное сохранение и загрузку для MODX-сниппетов. Сергей принял идею и реализовал её.

3 сентября 2015 года он опубликовал отдельную заметку «[Console] Сохраняем код в сниппет», где сообщил, что Console теперь умеет сохранять и загружать код как из файлов, так и из сниппетов, а pull request с этой доработкой уже отправлен Николаю Ланцу.

При разборе pull request Николай провёл ревью реализации, обратил внимание на вопросы прав доступа и безопасности файловых операций и существенно переработал архитектуру этой части компонента.

В релизе Console 2.1.0-beta, опубликованном 5 сентября 2015 года, сохранение и загрузка кода через сниппеты и файлы уже вошли в официальный компонент. Одновременно были переработаны процессоры и проверки прав, проведён рефакторинг, добавлена работа с вложенными каталогами и возможность хранить поставляемые с компонентом скрипты в files/global.

Таким образом, корректная атрибуция этой функции выглядит так: первоначальную реализацию импорта/экспорта файлов сделал Сергей Шлоков; идею поддержки сниппетов предложил Максим, а реализовал её также Сергей; Николай Ланец провёл ревью, существенно переработал реализацию и включил её в официальный релиз Console 2.1.0-beta. Илья Уткин к файловому и сниппетному импорту/экспорту напрямую не относится — его более ранний вклад состоял в сохранении кода Console в $_SESSION.

Console — часть общей экосистемы компонентов Fi1osof. Историческое описание компонента опубликовано на Habr.