glance-project / error-middleware
错误中间件
v1.0.1
2024-08-05 13:11 UTC
Requires
- php: ^8.2
- php-http/discovery: ^1.14
- psr/http-factory: ^1.0
- psr/http-message: ^1.0
- psr/http-server-middleware: ^1.0
- psr/log: ^1.1
Requires (Dev)
- dq5studios/psalm-junit: ^2.0
- monolog/monolog: ^2.3
- nyholm/psr7: ^1.3
- phpunit/phpunit: ^8.5
- squizlabs/php_codesniffer: ^3.5
- vimeo/psalm: ^4.4
Suggests
- sentry/sdk: Allows sending errors to Sentry.
This package is auto-updated.
Last update: 2024-09-05 13:22:08 UTC
README
安装
使用 Composer 安装
composer require glance-project/error-handler
入门指南
错误处理器应该是最先由您的应用程序执行的中件。在 Slim 中,最后注册的中件首先执行。
$app = \Slim\App::create();
$logger = /* ... */;
$errorMiddleware = ErrorMiddleware::create();
$errorMiddleware->setLogger($logger); // Optional. Accepts any PSR-3 logger
$errorMiddleware->debugMode(true); // Optional. Set to false on production
$errorMiddleware->useSentry(); // Optional. Sentry must be installed and configured
$app->add(/* other middleware */);
$app->add($errorMiddleware);
/* Register routes here */
$app->run();
如果错误处理器不是首先注册的中件,那么先前中件抛出的异常将无法得到适当处理。
异常
初始化后,所有未捕获的异常都由该库处理。
ErrorMiddleware
根据异常的类型表现不同。
BaseException
在开发应用程序时,有时希望终止一切并返回错误给用户。此库提供了一个封装一个或多个错误的 BaseException
。
Error
部分遵循 JSON API 标准,以下为可选字段
- 标题
- 细节
- 代码
- HTTP 状态码
- 来源
$errors = [
new Error("Invalid email", "Email is bad formatted."),
new Error(
"Invalid password",
"Password should contain at least 6 characters.",
12345,
400,
new ErrorSource("user/password")
),
];
throw new BaseException(400, $errors);
上面的代码在您的应用程序中会产生以下 HTTP 响应
状态:400
{
"status": 400,
"errors": [
{
"title": "Invalid email",
"details": "Email is bad formatted."
}
{
"title": "Invalid password",
"details": "Password should contain at least 6 characters.",
"code": 12345,
"status": 400,
"source": { "pointer": "user/password" }
}
]
}
您也可以通过扩展 BaseException
创建自定义异常。
其他异常
任何其他类型的未捕获异常将导致以下 HTTP 响应。
状态:500
{
"errors": [
{
"status": 500,
"title": "Internal Error",
"detail": "An unexpected server error occurred."
}
]
}
如果 debugMode
开启,则会在响应体中附加额外的调试信息,例如文件、行、消息和跟踪。
使用 Sentry
要将未知错误发送到 Sentry,请安装并初始化 sentry/sdk
。有关在 PHP 上设置 Sentry 的更多信息,请参阅官方文档。
composer require sentry/sdk
<?php
\Sentry\init([
"dsn" => getenv("SENTRY_DSN"),
"environment" => getenv("ENVIRONMENT"),
]);
$app = \Slim\App::create();
$logger = /* ... */;
$errorMiddleware = ErrorMiddleware::create();
$errorMiddleware->useSentry();
$app->add(/* other middleware */);
$app->add($errorMiddleware);
// Register routes here...
$app->run();