对于我的新 SPA 的后端,我想通过使用自定义错误和异常处理程序以一种很好的方式将错误传递到前端。
我可以像这样向 slim 框架添加自定义错误处理程序:
$app->error(function (Exception $e) use ($app) {
// do stuff
}
然而,这不会捕获 fatal error 。我还定义了一个全局默认错误处理程序,只要它们发生在 Slim 上下文之外,它就会捕获 fatal error 。
set_error_handler(function() {
echo "Huston we got a problem";
die();
});
当我这样做时,这个处理程序被调用得很好:
require "asdasd.php"; // trigger fatal error
$app->get("/test", $authenticate, function () use ($app) {
// useful stuff
});
但不是当我这样做的时候:
$app->get("/test", $authenticate, function () use ($app) {
require "asdasd.php"; // trigger fatal error
// useful stuff
});
最后一个演示实际上似乎触发了 php 默认错误处理程序。
有谁知道我怎样才能让 Slim 不对我的错误施展魔法并触发顶层处理程序或让 Slims 自定义错误处理程序捕获 fatal error ?
最佳答案
试试这个:
use Slim\Slim;
$app = new Slim();
register_shutdown_function('fatal_handler');
function fatal_handler()
{
if(! is_null(error_get_last()))
{
echo('There is a fatal error!');
}
}
require 'xxxx';
$app->get('/test', function () use ($app)
{
echo('This is a test');
});
$app->run();
关于php - Slim 框架忽略 fatal error 的自定义错误处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23337835/