如何解决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 的错误级别系统为 warnings,notices and errors。
Undefined index in index.php line 42
只是一个 PHP 通知。
Slim ErrorMiddleware 不处理这种类型的 PHP 错误。
要“捕获”此类 PHP 错误,您可以使用 set_error_handler
函数添加自定义错误处理程序。
阅读更多
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。