juliangut / slim-exception
Slim HTTP 异常处理
3.0.1
2023-10-21 19:54 UTC
Requires
- php: ^8.0
- ext-mbstring: *
- slim/slim: ^4.11
- willdurand/negotiation: ^3.0
Requires (Dev)
- ext-dom: *
- ext-json: *
- ext-simplexml: *
- filp/whoops: ^2.15
- infection/infection: ~0.25|~0.27
- juliangut/easy-coding-standard-config: ^1.12
- juliangut/phpstan-config: ^1.1
- laminas/laminas-diactoros: ^2.20
- overtrue/phplint: ^4.0|^5.0|^6.0
- phpcompatibility/php-compatibility: ^9.3
- phpmd/phpmd: ^2.13
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^9.6.13|^10.3
- povils/phpmnd: ^3.2
- roave/security-advisories: dev-master
- symfony/var-dumper: ^6.0.4
Suggests
- filp/whoops: Enhance development error reporting (>=2.15)
- symfony/var-dumper: Help filp/whoops enhancing stack-traces (>=5.1)
README
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 文件。