Обработчик ошибок позволяет вам приспосабливать то, в каком виде ваш код будет возвращать ошибки.
Приятная страница ошибок с кучей отладочной информации будет с вами на протяжении всего длительного пути разработки. И первый пакет для нашего приложения об этом позаботится.
Мне нравится 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;
Вы должны лицезреть страницу ошибок с подсвеченной строчкой, где содержится исключение. Если не видите, вернитесь и отладьте код, пока он не станет работать должным образом. Сейчас как раз самое время для очередного коммита.