Отладка вашего приложения
Замена var_dump
Хотя использование XDebug и хорошей IDE может быть незаменимым для отладки вашего приложения, иногда быстрого var_dump() достаточно. CodeIgniter делает это ещё лучше, включая превосходный инструмент отладки для PHP Kint. Это значительно превосходит обычные инструменты, предоставляя множество дополнительных данных, например, форматирование временных меток в удобочитаемые даты, отображение шестнадцатеричных кодов как цветов, отображение данных массивов как таблицы для удобного чтения и многое другое.
Включение Kint
По умолчанию Kint включён только в средах разработки и тестирования среды. Это можно изменить, изменив значение $useKint в разделе конфигурации среды основного файла index.php:
$useKint = true;
Использование Kint
d()
Метод d() выводит все известные данные о содержимом, переданном в качестве единственного параметра, на экран, и позволяет продолжить выполнение скрипта:
d($_SERVER);
dd()
Этот метод идентичен d(), за исключением того, что он также dies() и дальнейшее выполнение кода в этом запросе не происходит.
trace()
Это предоставляет трассировку стека вызовов до текущей точки выполнения с уникальным подходом Kint:
trace();
Для получения дополнительной информации обратитесь к странице Kint.
Панель отладки
Панель отладки предоставляет информацию о текущем запросе к странице, включая результаты бенчмарка, выполненные вами запросы, данные запроса и ответа и многое другое. Это может быть очень полезно во время разработки для отладки и оптимизации.
Примечание
Панель отладки всё ещё находится в стадии разработки, с несколькими запланированными функциями, которые ещё не реализованы.
Включение панели
Панель включена по умолчанию во всех средах, кроме производственной. Она отображается всякий раз, когда определена константа CI_DEBUG, и её значение истинно. Это определено в файлах загрузки (например, app/Config/Boot/development.php) и может быть изменено там для определения среды отображения.
Примечание
Панель отладки не отображается, когда ваше значение baseURL (в app/Config/App.php или app.baseURL в .env) не совпадает с вашим фактическим URL.
Сама панель отображается как После фильтрации. Вы можете предотвратить её запуск, удалив её из свойства $globals в файле app/Config/Filters.php.
Выбор отображаемых элементов
CodeIgniter поставляется с несколькими коллекторами, которые, как следует из названия, собирают данные для отображения на панели. Вы можете легко создать свои собственные, чтобы настроить панель. Чтобы определить, какие коллекторы отображаются, перейдите в файл конфигурации app/Config/Toolbar.php:
public $collectors = [
\CodeIgniter\Debug\Toolbar\Collectors\Timers::class,
\CodeIgniter\Debug\Toolbar\Collectors\Database::class,
\CodeIgniter\Debug\Toolbar\Collectors\Logs::class,
\CodeIgniter\Debug\Toolbar\Collectors\Views::class,
\CodeIgniter\Debug\Toolbar\Collectors\Cache::class,
\CodeIgniter\Debug\Toolbar\Collectors\Files::class,
\CodeIgniter\Debug\Toolbar\Collectors\Routes::class,
\CodeIgniter\Debug\Toolbar\Collectors\Events::class,
];
Откомментируйте любые коллекторы, которые вы не хотите отображать. Добавьте пользовательские коллекторы здесь, указав полное имя класса. Точные коллекторы, которые отображаются здесь, повлияют на отображаемые вкладки, а также на отображаемую информацию на временной шкале.
Примечание
Некоторые вкладки, такие как База данных и Логи, отображаются только при наличии отображаемых данных. В противном случае они удаляются, чтобы помочь на более мелких экранах.
Коллекторы, поставляемые с CodeIgniter:
- Таймеры собирает все данные бенчмарка, как системные, так и вашего приложения.
- База данных Отображает список запросов, выполненных всеми подключениями к базе данных, и их время выполнения.
- Логи Любая информация, которая была записана в журнал, будет отображена здесь. В долгоживущих системах или системах с большим количеством записей это может привести к проблемам с памятью и должно быть отключено.
- Представления Отображает время рендеринга представлений на временной шкале и отображает любые данные, передаваемые в представления, на отдельной вкладке.
- Кэш Отобразит информацию о попаданиях и промахах кэша и времени выполнения.
- Файлы отображает список всех файлов, загруженных во время этого запроса.
- Маршруты отображает информацию о текущем маршруте и всех определённых в системе маршрутах.
- События отображает список всех событий, загруженных во время этого запроса.
Установка контрольных точек
Для того, чтобы Профилировщик мог скомпилировать и отобразить ваши данные бенчмарка, вы должны назвать свои точки отметки с использованием определённого синтаксиса.
Пожалуйста, ознакомьтесь с информацией об установке контрольных точек на странице Библиотеки бенчмарка.
Создание пользовательских коллекторов
Создание пользовательских коллекторов — простая задача. Вы создаёте новый класс, полностью пространственно-именной, чтобы автозагрузчик мог его найти, который расширяет CodeIgniter\Debug\Toolbar\Collectors\BaseCollector. Это предоставляет множество методов, которые вы можете переопределить, и имеет четыре обязательных свойства класса, которые вы должны правильно задать в зависимости от того, как вы хотите, чтобы коллектор работал
<?php
namespace MyNamespace;
use CodeIgniter\Debug\Toolbar\Collectors\BaseCollector;
class MyCollector extends BaseCollector
{
protected $hasTimeline = false;
protected $hasTabContent = false;
protected $hasVarData = false;
protected $title = '';
}
$hasTimeline должно быть установлено в true для любого коллектора, который хочет отображать информацию на временной шкале панели. Если это true, вам нужно будет реализовать метод formatTimelineData() для форматирования и возврата данных для отображения.
$hasTabContent должно быть true, если коллектор хочет отображать свою собственную вкладку с пользовательским содержимым. Если это true, вам нужно будет предоставить $title, реализовать метод display() для отображения содержимого вкладки и, возможно, реализовать метод getTitleDetails(), если вы хотите отобразить дополнительную информацию справа от заголовка содержимого вкладки.
$hasVarData должно быть true если этот коллектор хочет добавить дополнительные данные во вкладку Vars. Если это true, вам нужно будет реализовать метод getVarData().
$title отображается на открытых вкладках.
Отображение вкладки панели
Чтобы отобразить вкладку панели, вы должны:
- Заполните
$titleтекстом, который отображается как заголовок панели, так и заголовок вкладки. - Установите
$hasTabContentнаtrue. - Реализуйте метод
display(). - Необязательно, реализуйте метод
getTitleDetails().
Метод display() создаёт HTML, отображаемый внутри вкладки. Он не должен беспокоиться о заголовке вкладки, так как он автоматически обрабатывается панелью. Он должен возвращать строку HTML.
Метод getTitleDetails() должен возвращать строку, отображаемую справа от заголовка вкладки. Он может использоваться для предоставления дополнительной обзорной информации. Например, вкладка Базы данных отображает общее количество запросов по всем соединениям, а вкладка Файлы отображает общее количество файлов.
Предоставление данных временной шкалы
Чтобы предоставить информацию, которая должна быть отображена на временной шкале, вы должны:
- Установите
$hasTimelineнаtrue. - Реализуйте метод
formatTimelineData().
Метод formatTimelineData() должен возвращать массив массивов, отформатированных таким образом, чтобы временная шкала могла его отсортировать и правильно отобразить необходимую информацию. Внутренние массивы должны содержать следующую информацию:
$data[] = [
'name' => '', // Name displayed on the left of the timeline
'component' => '', // Name of the Component listed in the middle of timeline
'start' => 0.00, // start time, like microtime(true)
'duration' => 0.00, // duration, like mircrotime(true) - microtime(true)
];
Предоставление переменных
Чтобы добавить данные во вкладку Переменные, вы должны:
- Установите
$hasVarDataнаtrue - Реализуйте метод
getVarData().
Метод getVarData() должен возвращать массив, содержащий массивы пар ключ/значение для отображения. Имя внешнего ключа массива — это имя раздела во вкладке Переменные:
$data = [
'section 1' => [
'foo' => 'bar',
'bar' => 'baz',
],
'section 2' => [
'foo' => 'bar',
'bar' => 'baz',
],
];
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/testing/debugging.html