我正在使用 Silex 构建一个小应用程序。它分为REST应用程序和网站。 (two controllers,同一个应用)。 该网站已安装其own custom error handler,它返回一个用户友好的html页面。问题是在部分专用REST应用程序中,我应该以某种方式处理异常以返回类型[json]和与错误处理程序的自定义网站不同的内容。
这个参数也可以应用于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
});
问题是,如果从我的控制器中抛出异常,将使用默认错误处理程序。一些技巧? 和Symfony一起?
答案 0 :(得分:9)
我一直在我的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
答案 1 :(得分:1)
在Symfony2上,您可以使用ExceptionHandler。在Exception中,您有堆栈跟踪,因此您可以识别它被抛出的位置。
此外,在Symfony2中,您可以根据预期的格式进行自定义。很好地解释了in it's documentation。
例如,如果将ExceptionController替换为其中一个,则第三个参数显示预期的格式: