我无法让 phpErrorHandler 正常工作。我使用的是最新版本的 Slim,我的服务器运行的是 PHP 7.1。
use \Slim\App as App;
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
$app = new App([
'errorHandler' => function ($c) {
return function ($request, $response, $error) use ($c) {
return $c['response']
->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write('application error');
};
},
'phpErrorHandler' => function ($c) {
return function ($request, $response, $error) use ($c) {
return $c['response']
->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write('runtime error');
};
}
]);
当我从代码中抛出异常时,错误处理程序将被调用,并且我的输出是“应用程序错误”。但是,当我从代码中引发错误或引入语法错误时,不会调用 phpErrorHandler,并且根据我的设置,PHP 会生成带有堆栈跟踪的错误消息。
我尝试添加
ini_set('display_errors', 0); // do not produce the standard output when an error occurs
error_reporting(-1); // enable error reporting (is this required for Slim?)
但是我在该配置中所做的任何更改似乎都不会影响我的闭包是否被调用。
-编辑-
我尝试执行一段记录到控制台的 Javascript。这适用于 errorHandler,不适用于 phpErrorHandler。也很简单
die('oops');
在 phpErrorHandler 中不执行任何操作。看来回调根本没有被调用。
如果我尝试/捕获
$app->run();
我能够捕获错误。然而,这会导致一些我宁愿避免的令人讨厌的副作用。但这告诉我的是,它不是一个阻止我捕获错误的配置设置。
最佳答案
我也遇到了同样的问题,并且被提到 phpErrorHandler 功能的 Slim 3 文档稍微误导了。然而,直到 3.2.0 版本,phpErrorHandler 才被添加到 Slim 中: https://github.com/slimphp/Slim/releases/tag/3.2.0
如果您使用的是 Slim 版本 < 3.2.0,请尝试升级。
关于php - 为什么 Slim Framework php ErrorHandler 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49684070/