PHP Profi

Whoops! Наглядное отображение ошибок в PHP

php whoops error display pretty красивое отображение ошибок

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

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

И вот тут решить все эти проблемы нам поможет Whoops!

Что такое Whoops

Whoops — это небольшая библиотека/фреймворк для работы с ошибками и исключениями в PHP. Из коробки он предоставляет аккуратный и удобный интерфейс, который помогает вам вести разработку быстро.

Удобный красивый интерфейс

То, как выводит сообщение об ошибке whoops, на порядок (а то и на два) удобнее, чем нативный вывод PHP или xDebug. Интерфейс whoops позволяет быстро ориентироваться в стеке вызовов и находить нужное место в коде.

Как видно на скрине выше, слева вверху вы сразу видите тип исключения/ошибки и отдельно крупно само сообщение, что намного удобнее, чем:

Whoops\Example\Exception thrown with message "Something broke!"

 где слова 'thrown with message' явно лишние, или, например, чем такое:

Notice: Undefined offset: 0 in D:\localhost\projects\test\test.php on line 27

в котором нужно только само сообщение 'Undefined offset: 0' и... да и пожалуй, всё, т. к. любезно выведенный whoops-ом наглядный кусок кода — это намного удобнее, чем название файла и номер строки. У вас наверняка этот файл открыт в данный момент и вы наверняка помните где этот кусок кода — просто визуально, а не по номеру строки.

Далее, ниже слева находится список со стеком вызовов, который вы можете кликать и попереключаться между точками стека. Справа располагается отрывок кода, который относится к выбранной точке стека. При переключении на другую точку стека, отображается другой кусок кода. Это опять-таки удобнее, переключаясь между точками стека, сразу найти нужную точку, а не идти в IDE, искать по файлу и строке нужное место и, поняв, что это не оно, снова идти в браузер и проверять соседнюю точку стека.

Ну и плюс к этому ниже справа находится раздел "Environment & details", в котором выведены переменные окружения, информация о запросе (GET, POST, Files, Cookies), информация о php-сессии и "Server/Request Data" ($_SERVER), что часто бывает очень полезно.

Наглядно посмотреть как всё это выглядит и пощёлкать можно на демостраничке.

API и фичи

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

Фичи

Вот так "нескромно" smiley, но правдиво рассказывают о библиотеке её разработчики:

  • Гибкий стековый перехват ошибок
  • Не требует зависимостей (на данный момент)
  • Простое API для работы с исключениями, фреймами стека вызовов и их данными
  • Включает информативную страницу ошибки
  • Возможность открыть указанный файл прямо в вашем IDE/редакторе
  • Включает обработчики для разных форматов ответа (JSON, XML, SOAP)
  • Легко расширяется и легко интегрируется в другие библиотеки и фреймворки
  • Аккуратный, хорошо структурированный и протестированный код

И тут сразу глаз цепляется за такую возможность, как открывать файлы сразу в IDE. На данный момент whoops из коробки поддерживает следующие IDE/редакторы:

  • Emacs
  • IDEA
  • MacVim
  • PhpStorm (только для MacOS)
  • Sublime Text 2 и возможно 3
  • Textmate
  • xdebug-формат
  • VSCode

Использование Whoops

Установка

Как и любую современную библиотеку, whoops можно установить с помощью composer:

composer require filp/whoops

Но я бы рекомендовал --dev smiley.

Подключение и настройка

В базовом варианте с подключением красивого вывода всё просто до безобразия:

$whoops = new \Whoops\Run;
$whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
$whoops->register();

Для более детального погружения и понимания как это можно настроить под ваши нужды, разработчики предоставили набор примеров, которые вы сможете найти в папке examples/. А также подробную документацию по API.

Настройка ссылки для открытия файла

Для готовых обработчиков ссылок всё просто:

use Whoops\Handler\PrettyPageHandler;

$handler = new PrettyPageHandler;
$handler->setEditor('sublime');

Параметр editor может принимать следующие значения:

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

$handler->setEditor(function($file, $line) {
    return "whatever://open?file=$file&line=$line";
});

Подробнее можно посмотреть тут.

Интеграция с фреймворками

Whoops имеет готовые интеграции практически со всеми фреймворками:

Symfony, в Laravel 4 и Laravel 5.5+ встроен из коробки, для Laravel 5, для Silex 1 и Silex 2, для Phalcon, для CakePHP 2 и CakePHP 3, для Zend 2 и Zend 3, Yii 1, FuelPHP, Slim, Pimple.

Ну и для любого фреймворка, который поддерживает StackPHP middlewares или PSR-7 middlewares.

Если я что-то не перечислил здесь, вы можете смело открывать поиск на packagist и вы наверняка найдёте готовый пакет.

Заключение

Этот небольшой, лёгкий и удобный пакет просто, как говорится, MUST HAVE!!! Простота в установке и настройке, а также огромное удобство при работе говорят сами за себя!

2017-11-15 alek13
General Food

Комментарии

авторизуйтесь, чтобы оставить комментарий