我正在使用slim framework 3。我是这个框架的新手。我正在努力捕获错误并返回自定义JSON错误和消息。
我使用此代码来捕获notFoundHandler错误:
insertAfter
但是我能够捕获正常的语法错误。 它显示警告:fwrite()期望参数2为字符串,在第42行的X-api \ controllers \ Products.php中给出数组
我希望自定义错误能够处理语法错误报告,而不是此消息。 我也用过这个,
$container['notFoundHandler'] = function ($c) {
return function ($request, $response) use ($c) {
return $c['response']
->withStatus(404)
->withHeader('Content-Type', 'application/json')
->write('Page not found');
};
};
但不适合我。
答案 0 :(得分:0)
默认错误处理程序还可以包含详细的错误诊断信息。要启用此功能,您需要将displayErrorDetails
设置为true:
$configuration = [
'settings' => [
'displayErrorDetails' => true,
],
];
$c = new \Slim\Container($configuration);
$app = new \Slim\App($c);
请注意,这不适用于生产应用程序,因为它可能会显示您不希望透露的一些细节。您可以在Slim docs找到更多信息。
修改强>
如果您需要处理parseErrors
,则需要在容器中定义phpErrorHandler
,就像定义notFoundHandler
一样。
$container['phpErrorHandler'] = function ($container) {
return function ($request, $response, $error) use ($container) {
return $container['response']
->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write('Something went wrong!');
};
};
注意:这仅适用于PHP7 +,因为在旧版本中无法捕获parseErrors。
答案 1 :(得分:0)
我在我的dependencies.php
中使用了这段代码$container['errorHandler'] = function ($c) {
return function ($request, $response) use ($c) {
$data = [
'message' => "Syntex error"
];
return $c['response']
->withStatus(200)
->withHeader('Content-Type', 'application/json')
->write(json_encode($data));
};
};
set_error_handler(function ($severity, $message, $file, $line) {
if (!(error_reporting() & $severity)) {
// This error code is not included in error_reporting, so ignore it
return;
}
throw new \ErrorException($message, 0, $severity, $file, $line);
});
现在它为我工作。