Обработчик ошибок позволяет вам приспосабливать то, в каком виде ваш код будет возвращать ошибки.
Приятная страница ошибок с кучей отладочной информации будет с вами на протяжении всего длительного пути разработки. И первый пакет для нашего приложения об этом позаботится.
Мне нравится filp/whoops, поэтому я покажу как вам его поставить на свой проект. Если вы предпочитаете другой, спокойно ставьте свой. В том и прелесть программинга без фреймворка - у вас есть тотальный контроль над собственным проектом.
Альтернативой мог бы послужить PHP-Error.
Для установки нового пакета откройте composer.json
и добавьте пакет в секцию require. После она должна выглядеть так:
"require": { "php": ">=7.0.0", "filp/whoops": "~2.1" },
Теперь запустите в консоли composer update
, и пакет установится.
Однако пока вы не сможете его использовать. PHP не в курсе, где найти файлы классов. Для этого вам понадобится автозагрузчик. Идеально, если это будет автозагрузчик PSR-4. Composer уже позаботился об этом, поэтому вам остается только добавить строку require __DIR__ . '/../vendor/autoload.php';
в файл Bootstrap.php
Важно: никогда не отображайте какие-либо ошибки в продакшене. Трассировка стека или даже простейшее сообщение об ошибке может помочь кому-либо получить доступ к вашей системе. Всегда показывайте пользователям заглушку-предупреждение, а для себя сохраняйте текст ошибки в логи, отправляйте на email или т.п. Таким образом, в продакшене только вы должны просматривать суть ошибок.
В режиме разработки это хоть и не важно, однако ж, вы хотите, чтобы страница с информацией об ошибке была приятной. Удобно иметь переключатель в коде для разных режимов. И пока нам нужен режим разработки - development
.
После регистрации обработчика ошибок, бросим Исключение, дабы протестить, что все работает корректно. Ваш файл Bootstrap.php должен быть теперь похожим на такой:
<?php declare(strict_types = 1); namespace Example; require __DIR__ . '/../vendor/autoload.php'; error_reporting(E_ALL); $environment = 'development'; /** * Register the error handler */ $whoops = new \Whoops\Run; if ($environment !== 'production') { $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler); } else { $whoops->pushHandler(function($e){ echo 'Todo: Дружественная заглушка и отправка email разработчику'; }); } $whoops->register(); throw new \Exception;
Вы должны лицезреть страницу ошибок с подсвеченной строчкой, где содержится исключение. Если не видите, вернитесь и отладьте код, пока он не станет работать должным образом. Сейчас как раз самое время для очередного коммита.