Дебаггинг и отладка october cms (dump, dd, log)

Опубликовано:
15.06.2020 в 21:30
Категория:
Предисловие: Заметил, что новички плохо знают как отслеживать ошибки и просматривать структуры данных в октябре. Из-за этого в чат сыпется множество очевидных вопросов. Я постараюсь пояснить в этой статье все популярные возможности дебаггинга.

Перейдем сразу к делу. Про саму October я писал в этой статье.

Как просматривать структуры данных

Все очень просто. Представим что мы обращаемся к какому-либо компоненту, и нам надо посмотреть что он возвращает.

Для того что бы это сделать есть несколько простых вариантов.

1. Использование dump() в twig шаблоне.

Если нажать на элемент в списке, можно посмотреть его содержание. Это очень удобно, особенно для моделей

{% set data = Component.get() %} 
{{ dump(data) }}

Это самый простой и удобный вариант.

Пример работы dump()

2. Использование dd() в php файлах

dd() - это аналог var_dump(); die;

dd() имеет подсветку синтаксиса, показывает любые типы данных. Показывает функции, параметры и связи в просматриваемых моделях

$model = Model::get();
dd($model);

Данный вариант используется только для данных полученных синхронно (не Ajax). Если php файл участвует в работе при рендере страницы, то он сработает. Выглядит он примерно так же как dump().

Пример использования: Представим, что у вас есть компонент. В компоненте вы получаете данные из модели. Но у вас скрипт работает неправильно. Вы хотите посмотреть структуру данных в функции самой модели. 

Новичок обычно получает данные в компонент, возвращает их и печатает в dump(). Кто уже освоился в октябре пишет в модель dd($data) и получит примерно тот же результат.

Пример использования dd()

3. Логирование

Данный способ особенно удобен. Данные отправляются в системный лог. Лог можно просматривать в админе (настройки - журнал событий). Журнал событий имеет историю, то есть данные сохраняются.

Для записи данных в журнал надо написать следующее:

use Illuminate\Support\Facades\Log; // Используем класс Log
$data = Model::data();
Log::error($data);

Просмотр журнала событий October CMS

Как видите очень удобно и просто.

Как смотреть данные если используется ajax обработчик.

Для новичка пожалуй это самый сложный вопрос. Я использую логирование, так как это самый удобный способ. Но есть и еще пара методов.

1. Вернуть данные в консоль js

Что бы это провернуть надо подготовить данные перед их возвращением. Данный метод неудобный и вряд ли его будет кто то использовать, но рассказать о нем надо.

Создаем обработчик, готовим данные

function onGetData()
{
  $data = Model::get()->toJson(); // Преобразуем тип данных в json иначе в консоли мы увидим [Object Object]
  return $data; // Возвращаем
}

Обратите внимание, что вернуть я собираюсь просто данные. Если отдать фрагмент (partial) то ничего не выйдет.

Обращаемся к обработчику и печать данных в консоль

$.request('onGetData', {
   complete: function(data) {
     console.log(data);
   }
});

Не рекомендую этот способ. Читать данные неудобно, только для извращенцев, которые могут парсить Json в своем головном мозге.

2. Просмотр данных через вкладку network инструментов разработчика

Неплохой метод, иногда использую его совместно с Log, когда лень. Использовать очень просто.

Возвращаем данные в php по старинке: 

$data = Model::get(); // Получаем данные модели
var_dump($data); die; // Возвращаем и убиваем скрипт. Можно использовать print_r()

Теперь открываем вкладку инструментов разработчика и переходим в network. Перезагружаем страницу или делаем Ajax запрос. Смотрим данные в response разделе. 

Если у вас стоит какой то редирект. Например, как в компоненте Order Shopaholic. То активируйте галочку preserve log. Теперь данные будут сохраняться всегда.

Просмотр содержимого массива во вкладке network

Данный способ подойдет для любой ситуации. Даже при использовании ajax. Надеюсь я кому-то смог облегчить жизнь)