いくつかのチェックを実行し、潜在的にさまざまなステータスコードを返すことができる必要があるAPI呼び出しがあります。カスタムビューなどは必要ありません。適切なコードを返すだけです。ユーザーが適切な資格情報を渡していない場合、401ステータスを返す必要があります。サポートされているリクエスト形式を送信していない場合は、400ステータスを返す必要があります。
APIなので、本当にやりたいのは、応答ステータスを設定し、リクエストが失敗した理由について単純な愚かなメッセージで終了することです(おそらくexit
を使用)。仕事を成し遂げるのに十分ですが、私はこれを正しく機能させることができませんでした。 PHPのheader()
とCakeの$this->header()
(これはすべてコントローラーにあります)を使用しようとしましたが、終了メッセージは表示されますが、ヘッダーには200 OK
ステータスが表示されます。
以下のコードを使用すると、メッセージが表示されますが、ヘッダーが設定されていません。私は何が欠けていますか?
if( !$this->auth_api() ) {
header( '401 Not Authorized' );
exit( 'Not authorized' );
}
header()
関数には、ステータスコードのパラメーターがあります。指定すると、サーバーがそれを処理します。
header('HTTP/1.1 401 Unauthorized', true, 401);
Gajusの答えを参照してください: https://stackoverflow.com/a/14223222/362536
PHP 5.4以降では、 http_response_code を使用できます。
http_response_code(404);
これにより、適切なHTTPヘッダーが設定されます。
PHP <5.4を実行している場合、2つのオプションがあります。
http_response_code
function をPHPに実装します。Cakes Response Class? を使用しない理由:=これにより、応答のステータスコードを簡単に設定できます。
$this->response->statusCode(200);
次に、JSONに最適なエラーメッセージを含むファイルをレンダリングします。
header を正しく設定しているとは思わないので、これを試してください:
header('HTTP/1.0 401 Unauthorized');
CakePHP 2.0.1でも同じ問題がありました
使ってみた
header( 'HTTP/1.1 400 BAD REQUEST' );
そして
$this->header( 'HTTP/1.1 400 BAD REQUEST' );
しかし、これらのどちらも私の問題を解決しませんでした。
私は最終的にそれを使用して解決しました
$this->header( 'HTTP/1.1 400: BAD REQUEST' );
その後、php/CakePHPからのエラーや警告はありません。
*編集:最後の$this->header
関数呼び出しで、400とエラーの説明テキストの間にコロン(:
)を挿入しました。
前に書いたとおりですが、私のような初心者のために、リターンを含めることを忘れないでください。
$this->response->statusCode(200);
return $this->response;