首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Slim框架忽略致命错误的自定义错误处理程序

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

Stack Overflow用户
提问于 2014-04-28 17:51:17
回答 1查看 2.3K关注 0票数 4

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

我可以向slim框架添加一个自定义错误处理程序,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
$app->error(function (Exception $e) use ($app) {
   // do stuff
}

但是,这并不能捕获致命错误。我还定义了一个全局默认错误处理程序,只要致命错误发生在Slim上下文之外,它就会捕获这些错误。

代码语言:javascript
代码运行次数:0
运行
复制
set_error_handler(function() {
    echo "Huston we got a problem";
    die();
});

当我这样做时,这个处理程序被调用得很好:

代码语言:javascript
代码运行次数:0
运行
复制
require "asdasd.php"; // trigger fatal error
$app->get("/test", $authenticate, function () use ($app) {
    // useful stuff
});

但当我这样做时就不会了:

代码语言:javascript
代码运行次数:0
运行
复制
$app->get("/test", $authenticate, function () use ($app) {
    require "asdasd.php"; // trigger fatal error
    // useful stuff
});

最后一个demo似乎触发了php默认的错误处理程序。

有谁知道怎样才能让Slim不对我的错误施展魔法,并让toplevel处理程序被触发,或者让Slims自定义错误处理程序捕获致命错误?

EN

回答 1

Stack Overflow用户

发布于 2015-03-10 10:55:31

试试这个:

代码语言:javascript
代码运行次数: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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23337835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档