3

私の CakePHP アプリでは、JSON を返し、特定のリクエストに対して終了します。この例は、ログイン用の API に GET リクエストとしてアクセスしようとする場合です。

header('Content-Type: application/json');
echo json_encode(array('message'=>'GET request not allowed!'));
exit;

ただし、エコーを JSON として送信するには、コンテンツ タイプをプレフィックスとして付ける必要があります。そうしないと、相手側のコードが別の解釈をします。

これを回避する方法についてのアイデアはありますか? または、少なくともそれを改善します。

更新: Cake バージョン 2.3.0

4

1 に答える 1

38

新しい 2.x 応答オブジェクトを利用できます。

public function youraction() {
    // no view to render
    $this->autoRender = false;
    $this->response->type('json');

    $json = json_encode(array('message'=>'GET request not allowed!'));
    $this->response->body($json);
}

http://book.cakephp.org/2.0/en/controllers/request-response.html#cakeresponseを参照してください

また、文書化されているように、強力な残りの機能と RequestHandlerComponent を使用してこれを自動的に達成することもできます: http://book.cakephp.org/2.0/en/views/json-and-xml-views.html

拡張子 json を許可し、アクションを として呼び出すだけです/controller/action.json。その後、cake は自動的に JsonView を使用し、配列を渡すだけで済みます。配列は JSON に変換され、ビュー クラスによって有効な応答が返されます。

どちらの方法も、「終了」ソリューションよりもクリーンです。die()/exit() を含むコードの単体テストを試みてください。これは惨めに終わります。したがって、最初からコードで使用しない方がよいでしょう。

于 2013-02-18T22:11:35.583 に答える