Slim框架忽略致命错误的自定义错误处理程序

时间:2014-04-28 09:51:17

标签: php error-handling slim

对于我的新SPA的后端,我想通过使用自定义错误和异常处理程序以一种很好的方式将错误传递给前端。

我可以将自定义错误处理程序添加到slim框架中,如下所示:

$app->error(function (Exception $e) use ($app) {
   // do stuff
}

然而,这并不能捕获致命错误。我还定义了一个全局默认错误处理程序,只要它们出现在Slim上下文之外,它就会捕获致命错误。

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自定义错误处理程序捕获致命错误?

1 个答案:

答案 0 :(得分:0)

试试这个:

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();