Все идет не так. Вы не можете предсказать ошибки, но можете их предвидеть. Каждое приложение Slim Framework имеет обработчик ошибок, который получает все исключенные исключения PHP. Этот обработчик ошибок также получает текущие объекты HTTP-запроса и ответа. Обработчик ошибок должен подготовить и вернуть соответствующий объект Response, который будет возвращен HTTP-клиенту.
Обработчик ошибок по умолчанию очень простой. Он устанавливает код состояния ответа 500, устанавливает тип содержимого
ответа text/html
и добавляет общее сообщение об ошибке в тело ответа.
Это, вероятно, не подходит для разработки приложений. Вам настоятельно рекомендуется реализовать собственный обработчик ошибок Slim.
Обработчик ошибок по умолчанию также может содержать подробную информацию диагностики ошибок. Чтобы включить это,
вам необходимо установить displayErrorDetails
значение true:
$configuration = [
'settings' => [
'displayErrorDetails' => true,
],
];
$c = new \Slim\Container($configuration);
$app = new \Slim\App($c);
Обработчик ошибок приложения Slim Framework - это услуга Pimple. Вы можете заменить свой собственный обработчик ошибок, указав собственный заводский метод Pimple с контейнером приложения.
Существует два способа ввода обработчиков:
$c = new \Slim\Container();
$c['errorHandler'] = function ($c) {
return function ($request, $response, $exception) use ($c) {
return $c['response']->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write('Something went wrong!');
};
};
$app = new \Slim\App($c);
$app = new \Slim\App();
$c = $app->getContainer();
$c['errorHandler'] = function ($c) {
return function ($request, $response, $exception) use ($c) {
return $c['response']->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write('Something went wrong!');
};
};
В этом примере мы определяем новый errorHandler
завод, который возвращает вызываемый. Возвращаемый вызов допускает три аргумента:
\Psr\Http\Message\ServerRequestInterface
\Psr\Http\Message\ResponseInterface
\Exception
Вызываемый ДОЛЖЕН возвращать новый \Psr\Http\Message\ResponseInterface
экземпляр, подходящий для данного исключения
Обработчики ошибок также могут быть определены как вызываемый класс.
class CustomHandler {
public function __invoke($request, $response, $exception) {
return $response
->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write('Something went wrong!');
}
}
и прилагается так:
$app = new \Slim\App();
$c = $app->getContainer();
$c['errorHandler'] = function ($c) {
return new CustomHandler();
};
Это позволяет нам определять более сложные обработчики или расширять / отменять встроенные Slim\Handlers*
классы.
Обратите внимание : следующие четыре типа исключений не будут обрабатываться обычаем errorHandler
:
Slim\Exception\MethodNotAllowedException
: Это можно обрабатывать с помощью пользовательского notAllowedHandler
.Slim\Exception\NotFoundException
: Это можно обрабатывать с помощью пользовательского notFoundHandler
.phpErrorHandler
.Slim\Exception\SlimException
: Этот тип исключения является внутренним для Slim, и его обработка не может быть переопределена.Чтобы полностью отключить обработку ошибок Slim, просто удалите обработчик ошибок из контейнера:
unset($app->getContainer()['errorHandler']);
unset($app->getContainer()['phpErrorHandler']);
Теперь вы отвечаете за обработку любых исключений, которые возникают в вашем приложении, поскольку Slim не будет обрабатываться