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

Posted

技术标签:

【中文标题】Slim 框架忽略致命错误上的自定义错误处理程序【英文标题】:Slim framework ignoring custom error handler on Fatal Error 【发布时间】:2014-06-13 19:22:46 【问题描述】:

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

【问题讨论】:

如果你在 Slim 配置中的 debug 参数设置为 true,自定义错误处理程序将不会捕获致命错误。 感谢您的评论,但已设置为 false。 【参考方案1】:

试试这个:

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

【讨论】:

我试过了,Slim 还在打印错误 @anthonygore 说的错误是什么?这是致命错误还是只是异常?

以上是关于Slim 框架忽略致命错误上的自定义错误处理程序的主要内容,如果未能解决你的问题,请参考以下文章

Play框架下处理致命错误的正确方法

PHP 处理错误函数

在 Slim 框架上发布请求

并行承诺的自定义错误处理

Slim 框架总是返回 404 错误

错误处理