daidesarano/embryo-error

用于处理错误的PSR-15中间件。

1.0.4 2021-06-11 09:33 UTC

This package is auto-updated.

Last update: 2024-09-11 17:05:11 UTC


README

PSR-15中间件用于处理错误。此处理器受Slim启发。它接收所有未捕获的PHP异常,并将它们转换为带有状态码的新HTTP响应。

要求

安装

使用Composer

$ composer require davidecesarano/embryo-error

用法

您可以通过内置的PHP服务器快速测试它,访问 https://:8000

use Embryo\Error\ErrorHandler;
use Embryo\Error\Middleware\ErrorHandlerMiddleware;
use Embryo\Http\Factory\{ResponseFactory, ServerRequestFactory};
use Embryo\Http\Server\RequestHandler;
use Embryo\Log\StreamLogger;
use Psr\Http\Message\{ResponseInterface, ServerRequestInterface};
use Psr\Http\Server\{MiddlewareInterface, RequestHandlerInterface};

// Set path log files and stream logger
$logPath = '/path/to/logs';
$logger = new StreamLogger($logPath);

// Set error handler
$errorHandler = (new ErrorHandler)->setLogger($logger);

// Set PSR Request and Response
$request = (new ServerRequestFactory)->createServerRequestFromServer();
$response = (new ResponseFactory)->createResponse(200);

// Set custom middleware with exception
class TestMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        throw new \Exception('This is a test error!');
    }
}

// ErrorHandler should always be the first middleware in the stack!
$middleware = new RequestHandler([
    (new ErrorHandlerMiddleware)->setErrorHandler($errorHandler),
    new TestMiddleware
]);


$response = $middleware->dispatch($request, $response);

选项

__construct(bool $displayDetails = true, bool $logErrors = true)

错误处理器包括错误诊断的详细信息并将其保存到日志文件中。要启用此功能,您需要将displayDetails和logErrors设置设置为true。

setLogger(LoggerInterface $logger)

如果logErrors设置为true,您必须设置PSR日志记录器。

setRenderer(ErrorRendererInterface $renderer = null, Throwable $exception)

您可以设置一个自定义的渲染器来打印错误。

use Embryo\Error\Interfaces\ErrorRendererInterface;
use Psr\Http\Message\{ServerRequestInterface, ResponseInterface};

class CustomRenderer implements ErrorRendererInterface 
{
    public function render(ServerRequestInterface $request, ResponseInterface $response, \Throwable $exception): ResponseInterface
    {
        // custom logic...
        return $response;
    }
}

$errorHandler = (new ErrorHandler)->setRenderer(CustomRenderer::class);