php - Slim v4,addErrorMiddleware 似乎没有做任何事情
问题描述
所以我刚开始使用苗条的 PHP 框架,我有点困惑。如文档中所述: https ://www.slimframework.com/docs/v4/middleware/error-handling.html#adding-custom-error-handlers
这应该添加某种错误处理。
所以我测试了那个代码:
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
use Psr\Log\LoggerInterface;
require __DIR__ . '/vendor/autoload.php';
$app = AppFactory::create();
// Add Routing Middleware
$app->addRoutingMiddleware();
// Define Custom Error Handler
$customErrorHandler = function (
Request $request,
Throwable $exception,
bool $displayErrorDetails,
bool $logErrors,
bool $logErrorDetails,
?LoggerInterface $logger = null
) use ($app) {
$logger->error($exception->getMessage());
$payload = ['error' => $exception->getMessage()];
$response = $app->getResponseFactory()->createResponse();
$response->getBody()->write(
json_encode($payload, JSON_UNESCAPED_UNICODE)
);
return $response;
};
// Add Error Middleware
$errorMiddleware = $app->addErrorMiddleware(true, true, true);
$errorMiddleware->setDefaultErrorHandler($customErrorHandler);
$app->get('/', function (Request $request, Response $response, $args) {
$test = [];
$foo = $test['nada'];
$response->getBody()->write("Hello world!");
return $response;
});
$app->run();
现在,当我调用未定义的路线时,例如
localhost:8000/this/route/doenst/exist
或者只是让一些错误的代码运行(从数组访问未定义的键)
localhost:8000/
我只是得到“普通”错误
所以我想我的问题是:如何实现一个错误处理程序来处理编码错误或调用未定义的路由?
解决方案
ErrorMiddleware
处理任何类型的Exception
或Throwable
。
您可以通过抛出异常来测试 ErrorMiddleware,如下所示:
throw new \RuntimeException('Test error message');
此外Throwable
,PHP 有其较旧的警告、通知和错误错误级别系统。
Undefined index in index.php line 42
只是一个 PHP 通知。
Slim ErrorMiddleware 不处理这种类型的 PHP 错误。
要“捕获”这种类型的 PHP 错误,您可以使用该set_error_handler
函数添加自定义错误处理程序。
阅读更多
推荐阅读
- css - CSS -ms-grid-columns 语法显示带有扩展名的 VS Code 中的错误
- parallel-processing - 在(AMD)GPU而不是CPU上运行二进制(exec)的方法是什么?
- r - 如何将基于键的行与组合在单个列中的值组合
- c# - 在 Excel 中发生缓慢计算时,如何让计算百分比显示在我的 WinForm 中?
- c# - 如何在 C# 中添加延迟?
- javascript - Typescript 方法参数装饰器仅在构建时评估,是否可以在请求时评估?(nodejs+nestjs)
- node.js - 在另一个线程上发送 MessageAttachment
- java - 如何在运行时为 Spring Boot 中的不同配置文件创建多个 bean?
- linux - 尝试运行 JBoss 时如何解决 java.lang.NullPointerException?
- tensorflow - 如何只安装 XLA?