-->

捕获异常有不同的处理程序应用REST(Capture exceptions with a diffe

2019-08-16 23:21发布

问题

我在建设有Silex的一个小应用程序。 这是一个REST的应用程序和网站之间的分歧。 ( 两个控制器 ,相同的应用程序)。 该网站已安装了自己的自定义错误处理程序 ,它返回一个用户友好的HTML页面。 问题是,在部分专用REST应用,我应该以某种方式处理异常返回类型[JSON]和内容从错误处理程序的自定义网站不同。

随着Symfony2的

这种说法也可以应用于Symfony2的,我也想它可能的解决方案!

对于捷希凯第一种解决方案

包装在try-catch块的方法,以重新抛出异常处理程序。

$app->get('/api/show-list', function() use($app){
    try {
        $show = // db query, etc.
        return $app->json(array('show' => $show), 200);
    } catch (Exception $e) {
        throw new MyException;
    }
});

$app->error(function (MyException $e, $code) {
    // error api
});

问题是,如果一个异常被抛出我controllor的默认错误处理程序将被使用。 一些技巧? 并与Symfony的?

Answer 1:

我一直在用我的Silex的RESTful应用程序返回JSON格式错误如下:

$app->error(function (\Exception $e, $code) use($app) {
    return $app->json(array("error" => $e->getMessage()),$code);    
});

不知道这是正确的方式,但它为我工作。

这是记录在Silex的网站: http://silex.sensiolabs.org/doc/usage.html#error-handlers



Answer 2:

在Symfony2中可以使用的ExceptionHandler。 在异常你有堆栈跟踪,这样你就可以找出它被抛出。

此外,在Symfony2中,你可以根据预期的格式进行定制。 它很好地解释它的文档中 。

举例来说,如果你与你的一个替代ExceptionController,第三个参数显示预期的格式:

参考在哪里改变ExceptionController

ExceptionController API



文章来源: Capture exceptions with a different handler for applications REST