2016-09-30 4 views
0

私はRESTler APIフレームワークからSilexに切り替える作業を進めています。挑戦の一部は、私たちがそれに依存している実稼働中のアプリケーションを持っているので、APIからの応答が変わらないことを確認することです。現在、アウト・オブ・ボックスサイレックス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

[エラーハンドラ](http://silex.sensiolabs.org/doc/master/usage.html#error-handlers)を見てみましたか? – Samundra

+0

@Samundraはい、これは実際問題の一部です。アプリケーション全体に$ appを渡して、ビジネスロジック、バリデーター、モデルレイヤーのいくつかにアクセスさせる必要があります。私は、私がシンフォニーであると信じているものによって捕らえられることから例外を傍受する必要があります。私が '新しいRestException(400、 'いくつかのメッセージ')'を投げ、それが傍受され、私はフープのエラーを取得します。 – SeaFuzz

答えて

0

コンストラクタtry 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); 
} 
関連する問題