2016-09-30 117 views
0

我正在从RESTler API框架切换到Silex。部分挑战是确保我们API的响应不会改变,因为我们有依赖于它的生产应用程序。目前出的现成的Silex 2.0拦截了我们的JSON错误处理程序以及与此替换它:Silex JSON样式响应

Whoops Message

我需要一个反应是:

{ 
    "error": { 
    "code": 400, 
    "message": "This API key is not authorized to complete the operation" 
    } 
} 

我已经发现了解决方案的片段,但它们大多数都过时了,或者我无法让它们与Silex 2.0一起工作。

我可以轻松地做

if (!$controllerResponseData) { 
    $error = array('message' => 'This API key is not authorized to complete the operation'); 
    return $app->json($error, 400); 
} 

然而这个本来在航线水平上进行,迫使我重写我所有的控制器。他们不管理错误,在业务逻辑和模型层面处理更深。

他们是否可以重写Silex中的默认错误处理?另外,最理想的是进行错误处理,因为它是用于调试的,但在生产或本地测试中很容易切换到JSON错误响应。

+0

您是否尝试查看[Errorhandlers](http://silex.sensiolabs.org/doc/master/usage.html#error-handlers)? – Samundra

+0

@Samundra是的,这实际上是问题的一部分。我需要在整个应用程序中传递$ app,以便将其应用到一些业务逻辑,验证器和模型层。我只需要拦截我认为是交响乐的异常。无论在哪里,我都会抛出新的RestException(400,'某条消息')'它被拦截,并且我得到了Whoops错误。 – SeaFuzz

回答

0

使用建筑试试catch。例如:

try{ 
    // your code 
} catch(\Namespace\RestException $e) { 
    $error = array('message' => 'This API key is not authorized to complete the operation'); 
    return $app->json($error, 400); 
}