2016-09-30 83 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); 
}