Как оптимизировать ваше окружение разработки для отладки

Как оптимизировать ваше окружение разработки для отладки

Когда вы работаете над проектом Symfony на вашей локальной машине, вы должны использовать окружение dev (фронт-контроллер app_dev.php). Конфигурация этого окружения оптимизирована для двух главных целей:

  • Предоставлять разработчику точную обратную связь, каждый раз, когда что-то идёт не так (панель инструментов веб-отладки, хорошие страницы исключений, профилировщик, ...);
  • Быть настолько, насколько это возможно, схожим с окружением производства, чтобы избежать проблем при развёртывании проекта.

Отключение файла начальной загрузки и кеширование класса

Чтобы сделать окружение производства настолько быстрым, насколько это возможно, Symfony создаёт большие PHP-файлы в вашем кеше, которые содержать объединение PHP-классов, необходимых вашему проекту для каждого запроса. Однако, это поведение может смутить вашего отладчика, так как один и тот же класс может находиться в двух разных местах. Оргинальный файл класса и большой файл, который объединяет многие классы.

Этот рецепт показывает вам, как вы можете изменить этот механизм кеширования так, чтобы он был более дружественным, когда вам необходимо отладить код, который связан с классами Symfony.

Фронт-контроллер app_dev.php по умолчанию считывает так:

1
2
3
4
5
6
7
8
9
// ...

$loader = require __DIR__.'/../app/autoload.php';
Debug::enable();

$kernel = new AppKernel('dev', true);
$kernel->loadClassCache();
$request = Request::createFromGlobals();
// ...

Чтобы порадовать вашего отладчика, отключите загрузку всех кешей PHP-классов, удалив вызов к loadClassCache():

1
2
3
4
5
6
7
8
// ...

$loader = require_once __DIR__.'/../app/autoload.php';
Debug::enable();

$kernel = new AppKernel('dev', true);
// $kernel->loadClassCache();
$request = Request::createFromGlobals();

Tip

Если вы отключите PHP-кеши, не забудьте включить их после сессии отладки.

Некоторым IDE не нравится тот факт, что некоторые классы хранятся в разных местах. Чтобы избежать проблем, вы можете либо сказать вашему IDE игнорировать файлы PHP-кеша, либо вы можете изменить расширения, используемые Symfony для этих файлов:

1
$kernel->loadClassCache('classes', '.php.cache');

Полезные команды отладки

При разработке большого приложения, может быть тяжело уследить за всемы разными сервисами, маршрутами и переводами. К счастью, Symfony имеет некоторые команды, которые могут помочь вам визуализировать и находить информацию.

debug:container
Отображает информацию о содержимом контейнера Symfony для всех пуличных сервисов. Чтобы найти только те, которые соответствуют имени, припишите имя в качестве аргумента.
debug:config
Отображает все сконфигурированные пакеты, их классы и союзников.
debug:router
Отображает информацию о сконфигурированных маршрутах в приложении в виде таблицы с именем, методом, схемой, хостом и путём для каждого маршрута.
debug:translation <locale>
Отображает таблицу ключа перевода, домена, перевода и запасного перевода для всех известных сообщений, если переводы существуют для заданной локали.

Tip

Если вы сомневаетесь, как исползовать консольную команду, окройте раздел помощи, приписав опцию --help.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.