Skip to content

Представляем ADP — Универсальная панель отладки PHP

announcementrelease

Каждый 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 следует многослойной архитектуре, спроектированной для расширяемости:

  1. Kernel — Ядро, управляющее жизненным циклом отладчика, коллекторами данных и хранилищем. Полностью независимо от фреймворка.
  2. Adapters — Тонкие мосты, подключающие ADP к DI-контейнеру, событиям и middleware конкретного фреймворка. Адаптеры существуют для Yii 3, Symfony, Laravel и Yii 2.
  3. API — Слой REST + SSE, предоставляющий собранные отладочные данные фронтенду.
  4. Frontend — SPA на React, отображающий отладочные данные с фильтрацией, поиском и обновлениями в реальном времени.

Поток данных прост: ваше приложение работает с установленным адаптером. Адаптер регистрирует прокси-объекты, оборачивающие PSR-интерфейсы. Эти прокси незаметно собирают данные и передают их коллекторам. Когда запрос завершается, все данные сбрасываются в хранилище. Фронтенд получает их через API.

Что можно инспектировать

Из коробки ADP предоставляет коллекторы для:

  • HTTP-запросы и ответы — заголовки, тело, тайминг, коды статуса
  • Сообщения логов — все уровни PSR-3, с контекстом и временными метками
  • События — отправленные события, их слушатели и порядок выполнения
  • Запросы к базе данных — SQL, привязки, время выполнения, обнаружение медленных запросов
  • Исключения — полные стеки вызовов с контекстом исходного кода
  • Конвейер middleware — порядок выполнения и тайминг каждого middleware
  • Вызовы HTTP-клиента — исходящие запросы вашего приложения
  • Сервис-контейнер — разрешённые сервисы, время сборки и графы зависимостей

Каждый коллектор независим и может быть включён или отключён через конфигурацию. Вы также можете писать собственные коллекторы для данных, специфичных для вашего домена — подробнее об этом в следующей публикации.

Обновления в реальном времени через SSE

Одна из ключевых возможностей ADP — отладка в реальном времени через Server-Sent Events. Когда ваше приложение обрабатывает запросы, отладочные данные мгновенно поступают в панель. Ручное обновление не требуется. Это особенно полезно при отладке асинхронных воркеров, задач очереди или консольных команд — сценариев, с которыми традиционные профилировщики на основе страниц не справляются.

Начало работы

ADP поддерживает PHP 8.4+ и устанавливается через Composer. Выберите адаптер для вашего фреймворка:

bash
# 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.

Следите за блогом, чтобы не пропустить руководства, подробные разборы и анонсы релизов. Мы только начинаем.

Выпущено под лицензией MIT.