juliangut/slim-exception

Slim HTTP 异常处理

3.0.1 2023-10-21 19:54 UTC

README

PHP version Latest Version License

Total Downloads Monthly Downloads

slim-exception

使用更好的响应格式协商、更好的异常记录和更好的开发支持的替代 Slim 错误处理

安装

Composer

composer require juliangut/slim-exception

使用方法

需要 composer 自动加载文件

require './vendor/autoload.php';

use Jgut\Slim\Exception\Handler\ErrorHandler;
use Jgut\Slim\Exception\Whoops\Handler\ErrorHandler as WhoopsErrorHandler;
use Negotiation\Negotiator;
use Slim\Factory\AppFactory;
use Whoops\Run as Whoops;

// Instantiate the app
$app = AppFactory::create();

// ...

$callableResolver = $app->getCallableResolver();
$responseFactory = $app->getResponseFactory();
$logger = new Logger();

$errorHandler = $inDevelopment && class_exists(WhoopsErrorHandler::class)
    ? new WhoopsErrorHandler($callableResolver, $responseFactory, new Negotiator(), $logger)
    : new ErrorHandler($callableResolver, $responseFactory, new Negotiator(), $logger);

// Add Error Middleware
$errorMiddleware = $app->addErrorMiddleware($inDevelopment, true, true);
$errorMiddleware->setDefaultErrorHandler($errorHandler);

// ...

$app->run();

渲染器

在配置 slim-exception 错误处理程序时配置自定义错误渲染器。不必担心,开箱即用的 ErrorHandler 是 Slim 默认 ErrorHandler 的直接替换

您可以注册自己的错误渲染器或完全更改它们

$errorHandler = new ErrorHandler($callableResolver, $responseFactory, new Negotiator());

// Set single error renderer
$errorHandler->setErrorRenderer('application/xhtml+xml', MyCustomHtmlRenderer::class);

// Completely replace error renderers
$errorHandler->setErrorRenderers(['text/html' => MyCustomHtmlRenderer::class]);

Whoops

开发者在开发环境中应获得更好的、更详细的信息错误处理

Whoops 是这个目的的绝佳工具,其使用已集成在此包中。有一个特殊的 Whoops 错误处理程序,可以用作开发环境的默认异常处理程序

由于 Whoops 渲染器是为开发显示而设计的,所以在 Slim\Interfaces\ErrorRendererInterface::__invoke 上的 displayErrorDetails 参数将不被考虑,堆栈跟踪将始终显示

如何包含 Whoops 错误处理程序的示例在上面的代码中

要使用此处理程序,您需要首先引入 whoops。此外,Symfony 的 var-dumper 与 whoops 兼容良好,因此也需要引入它

composer require --dev filp/whoops
composer require --dev symfony/var-dumper

处理所有错误/异常

为了完全集成错误处理与环境,您可以全局注册 ExceptionHandler。这样,任何触发和未处理的错误都将被错误处理程序捕获和处理

use Jgut\Slim\Exception\ExceptionHandler;
use Slim\Factory\AppFactory;

// Instantiate the app
$app = AppFactory::create();

// ...
// Create and register $errorHandler in error middleware

$request = Psr17ServerRequestFactoryInterface::createServerRequest();

$exceptionHandler = new ExceptionHandler($request, $errorHandler, $inDevelopment, true, true);
$exceptionHandler->registerHandling();

// ...

$app->run($request);

// This error will be captured and gracefully handled
trigger_error('This is embarrassing', \E_USER_ERROR);

从 2.x 升级

  • 最低 PHP 版本现在是 8.0
  • 最低 Whoops 版本是 2.15,因为已删除自定义 Inspector 以支持 Whoop 的帧过滤器

贡献

发现了一个错误或有一个功能请求? 请打开一个新问题。在提交之前先看看现有的问题。

参见 CONTRIBUTING.md 文件

许可

有关许可证条款的副本,请参阅源代码中包含的 LICENSE 文件。