5

问题

我正在使用Silex构建一个小型应用程序。它分为 REST 应用程序和网站。(两个控制器,同一个应用程序)。该网站安装了自己的自定义错误处理程序,它返回一个用户友好的 html 页面。问题在于,在部分专用 REST 应用程序中,我应该以某种方式处理异常以返回类型 [json] 和与错误处理程序的自定义网站不同的内容。

使用 Symfony2

这个论点也可以应用于 Symfony2,我也想有可能的解决方案!

Silex 的第一个解决方案

将方法包装在 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
});

问题是,如果我的控制器抛出异常,将使用默认错误处理程序。一些技巧?Symfony 呢?

4

2 回答 2

10

我一直在我的 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

于 2013-03-04T10:03:39.697 回答
2

在 Symfony2 上,您可以使用 ExceptionHandler。在 Exception 上,您有堆栈跟踪,因此您可以确定它被抛出的位置。

此外,在 Symfony2 中,您可以根据预期的格式进行自定义。它的文档中有很好的解释。

例如,如果您将 ExceptionController 替换为您的一个,第三个参数将显示预期的格式:

关于在何处更改 ExceptionController 的参考

异常控制器 API

于 2013-02-16T00:29:26.710 回答