捕获语法错误和自定义错误报告

时间:2016-12-21 12:11:09

标签: slim

我正在使用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'); 
    }; 
};

但不适合我。

2 个答案:

答案 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);
});

现在它为我工作。