Квест → Как хакнуть форму
Прошли: 77
Когда мы сталкиваемся с ошибками в PHP, каждый раз это, мягко говоря, тихий ужас. А если вы вспомните как вы в первый раз смотрели на это сообщение и пытались понять, что "от вас вообще хотят" и как это чудо читать и понимать, то вы точно со мной согласитесь. Не то чтобы эти сообщения об ошибках не информативны, — нет там достаточно информации, — но читать их практически невозможно. Ну как минимум очень неудобно, а как следствие — долго, что прямо влияет на скорость разработки. Конечно, если у вас стоит и настроен xDebug
, это немного спасает ситуацию, но не особо.
В довершение к тому, что эти сообщения не читабельны и плохо воспринимаются, добивает то, что на поиск места в коде в вашем любимом IDE уходит достаточно много времени (ну больше, чем хотелось бы). Ну и напоследок, в тот момент, когда вы открыли нужное место в коде, вы тут же поняли, что ошибка явно произошла не здесь, а где-то выше или ниже по стеку. И нужно вновь открывать станицу с ошибкой, изучать сек вызова и вновь искать нужный фрагмент кода. Неприятное и муторное занятие.
И вот тут решить все эти проблемы нам поможет 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), что часто бывает очень полезно.
Наглядно посмотреть как всё это выглядит и пощёлкать можно на демостраничке.
В сердце whoops находится простая, лёгкая, но всё-таки удобная в использовании и мощная система. Несмотря на то, что библиотека позиционируется как фреймворк, и как бы "страшно" не звучало это слово, на самом деле это небольшой и лёгкий пакет, не требующий дополнительных зависимостей.
Вот так "нескромно" , но правдиво рассказывают о библиотеке её разработчики:
И тут сразу глаз цепляется за такую возможность, как открывать файлы сразу в IDE. На данный момент whoops из коробки поддерживает следующие IDE/редакторы:
Как и любую современную библиотеку, whoops можно установить с помощью composer:
composer require filp/whoops
Но я бы рекомендовал --dev
.
В базовом варианте с подключением красивого вывода всё просто до безобразия:
$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
может принимать следующие значения:
emacs
— Emacsidea
— IDEAmacvim
— MacVimphpstorm
— PhpStorm (MacOS)sublime
—Sublime Text 2 and possibly 3 (на OS X вам, возможно, потребуется специальный обработчик)textmate
— Textmatexdebug
— xdebug (xdebug.file_link_format)vscode
— VSCode (Opening VS Code with URLs)Добавление обработчика ссылки для своего редактора тоже очень просто:
$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!!! Простота в установке и настройке, а также огромное удобство при работе говорят сами за себя!