Представляем ADP — Универсальная панель отладки PHP
Каждый PHP-разработчик сталкивался с этим: вы добавляете var_dump() для отслеживания бага, разбрасываете вызовы dd() по контроллерам или копаетесь в логах, пытаясь собрать воедино картину того, что произошло во время запроса. Отладка в PHP всегда ощущалась фрагментированной — каждый фреймворк предлагает свои инструменты, они не взаимодействуют друг с другом, и смена проекта означает изучение нового рабочего процесса отладки.
ADP (Application Development Panel) создан, чтобы это изменить.
Проблема
PHP-фреймворки значительно развились. У Symfony есть Profiler, у Laravel — Telescope, у Yii — расширение Debug. Все это отличные инструменты, но у них общее фундаментальное ограничение: они привязаны к одному фреймворку. Если вы работаете с несколькими фреймворками — или поддерживаете устаревшие приложения наряду с современными — вам приходится жонглировать совершенно разными интерфейсами отладки.
Помимо фрагментации, большинство инструментов отладки тесно связаны с внутренностями своего фреймворка. Когда фреймворк меняется, отладчик ломается. Когда нужно отладить что-то на уровне PSR — конвейер middleware, вызов HTTP-клиента, взаимодействие с кешем — инструменты, специфичные для фреймворка, часто не справляются.
Решение: фреймворк-независимая отладка
ADP использует другой подход. Вместо того чтобы подключаться к внутренностям фреймворка, он перехватывает стандартные PSR-интерфейсы — контракты, которые уже реализуют все современные PHP-фреймворки:
- PSR-3 (Logger) — захватывает каждую запись лога
- PSR-7/PSR-17 (HTTP Messages) — записывает детали запросов/ответов
- PSR-14 (Event Dispatcher) — отслеживает события и слушателей
- PSR-15 (HTTP Handlers) — профилирует выполнение middleware
- PSR-16 (Simple Cache) — мониторит попадания, промахи и записи кеша
- PSR-18 (HTTP Client) — логирует исходящие HTTP-запросы
Поскольку ADP работает на уровне PSR, он совместим с любым фреймворком, реализующим эти стандарты. Одна панель отладки, один рабочий процесс для всех ваших проектов.
Архитектура в общих чертах
ADP следует многослойной архитектуре, спроектированной для расширяемости:
- Kernel — Ядро, управляющее жизненным циклом отладчика, коллекторами данных и хранилищем. Полностью независимо от фреймворка.
- Adapters — Тонкие мосты, подключающие ADP к DI-контейнеру, событиям и middleware конкретного фреймворка. Адаптеры существуют для Yii 3, Symfony, Laravel и Yii 2.
- API — Слой REST + SSE, предоставляющий собранные отладочные данные фронтенду.
- Frontend — SPA на React, отображающий отладочные данные с фильтрацией, поиском и обновлениями в реальном времени.
Поток данных прост: ваше приложение работает с установленным адаптером. Адаптер регистрирует прокси-объекты, оборачивающие PSR-интерфейсы. Эти прокси незаметно собирают данные и передают их коллекторам. Когда запрос завершается, все данные сбрасываются в хранилище. Фронтенд получает их через API.
Что можно инспектировать
Из коробки ADP предоставляет коллекторы для:
- HTTP-запросы и ответы — заголовки, тело, тайминг, коды статуса
- Сообщения логов — все уровни PSR-3, с контекстом и временными метками
- События — отправленные события, их слушатели и порядок выполнения
- Запросы к базе данных — SQL, привязки, время выполнения, обнаружение медленных запросов
- Исключения — полные стеки вызовов с контекстом исходного кода
- Конвейер middleware — порядок выполнения и тайминг каждого middleware
- Вызовы HTTP-клиента — исходящие запросы вашего приложения
- Сервис-контейнер — разрешённые сервисы, время сборки и графы зависимостей
Каждый коллектор независим и может быть включён или отключён через конфигурацию. Вы также можете писать собственные коллекторы для данных, специфичных для вашего домена — подробнее об этом в следующей публикации.
Обновления в реальном времени через SSE
Одна из ключевых возможностей ADP — отладка в реальном времени через Server-Sent Events. Когда ваше приложение обрабатывает запросы, отладочные данные мгновенно поступают в панель. Ручное обновление не требуется. Это особенно полезно при отладке асинхронных воркеров, задач очереди или консольных команд — сценариев, с которыми традиционные профилировщики на основе страниц не справляются.
Начало работы
ADP поддерживает PHP 8.4+ и устанавливается через Composer. Выберите адаптер для вашего фреймворка:
# Symfony
composer require --dev adp/adapter-symfony
# Laravel
composer require --dev adp/adapter-laravel
# Yii 3
composer require --dev adp/adapter-yii3
# Yii 2
composer require --dev adp/adapter-yii2После установки адаптер регистрируется автоматически. Откройте панель отладки в браузере и начинайте инспектировать.
Что дальше
ADP находится в активной разработке. Вот над чем мы работаем:
- Интеграция MCP-сервера — подключение ИИ-ассистентов напрямую к отладочным данным
- Документация по пользовательским коллекторам — руководства по созданию доменно-специфичных коллекторов
- Профилирование производительности — флейм-графы и отслеживание памяти
- Расширенная поддержка адаптеров — больше фреймворков, больше прокси
Мы верим, что отладка должна быть первоклассным опытом разработки, а не второстепенной задачей. ADP — наш вклад в то, чтобы сделать это реальностью для экосистемы PHP.
Следите за блогом, чтобы не пропустить руководства, подробные разборы и анонсы релизов. Мы только начинаем.