1

ドキュメントのREST命令を使用して、Cake2.1.3でAPIを作成しています。Cake1.3 で以前に書いたので、現在非推奨になっている CakeError クラスを使用して、リクエストされた形式の HTTP コードでレスポンスを発行します。たとえば、http: //example.com/widgets/ をリクエストした場合view/invalid-code.json の場合、cakeError は 400 エラー コード (およびメッセージ) を JSON 形式でディスパッチします。Cake 2.x はこれを処理するために例外を使用します。ドキュメントによると

throw new BadRequestException()

「Bad Request」メッセージを含む 400 HTTP コードを発行しますが、これは HTML 形式でのみ行われるようです。要求された形式で自動的に応答できますか?

4

2 に答える 2

3

選択した回答でそれを行うこともできますが、より簡単な方法は、Cake に自動的にレンダリングさせることです。Cake は、例外をレンダリングするときに同じビュー検索ルールを使用します。これは、単に「json」フォルダーをビューのエラー フォルダーに追加し、適切なビュー ファイルを作成することを意味します。

/View
  /Errors
    /json
      error404.ctp
  error404.ctp

エラー ビューは、次のように単純なものにすることができます。

<?php

echo json_encode(array(
    'error' => array(
        'name' => $name,
        'url' => $url
    )
));

訪問/users/missing-page.jsonすると、次のjsonがレンダリングされます。

{"code":404,"url":"\/users\/missing-page.json","name":"Action UsersController::missing-page() could not be found."}
于 2014-01-10T18:09:43.427 に答える
2

私の知る限り、これを自動的に行う方法はありませんが、リクエストをチェックして適切なコンテンツ タイプを出力する独自の例外ハンドラを作成できます。

于 2012-06-26T17:07:01.380 に答える