6

メインの Response クラスで 400 に設定しても、次のコードの応答ステータス コードは常に 200 であるため、理解できず、他にどこを見ればよいかわかりません。

class Api_Controller extends Base_Controller
{

    public function __construct()
    {
          parent::__construct();

          //header("HTTP/1.0 404 Not Found"); ##> This works
          //die();

          $test = array('1' => '2');
          die(Response::json($test, 400));
    }

私は何が欠けていますか?私は拡張クラスを使用していません。デフォルトだけです...

アップデート

これは上記の出力ですResponse::json...: http://pastebin.com/RGcinSdg

ご覧のとおり、出力には設定された値が含まれていますが、何らかの理由で 200 が返されます。

Update2

の出力var_dump(http_response_code());は常に200

Update3 - 一時的な修正

の拡張バージョンを有効にしてResponse::json、次の行を追加しました

http_response_code($status);

しかし、なぜそうしないのか、どうあるべきかを知りたいと思います

4

5 に答える 5

11

コントローラー コンストラクターから応答を返すことはできません。Laravel の要求ライフサイクルの流れに合わないだけです。

これを行うには 2 つの方法があります。次のいずれかを実行できます。

a) 達成しようとしている機能を処理する応答フィルターをセットアップするか、b) コントローラー ACTION に応答を返すように強制します。これは次のように行われます。

class Api_Controller extends Base_Controller
{
    public $restful = true;

    public function get_index()
    {
        return Response::json($test, 400);
    }
}

それは機能します-あなたはそれを間違ってやっているだけです:)

于 2013-02-05T22:06:11.027 に答える
3

returnステートメントを忘れると、同じ問題が発生します。

Response::json(array(
   'error' => true,
   'msg' => 'Bad request'
), 403);

それ以外の:

return Response::json(array(
   'error' => true,
   'msg' => 'Bad request'
), 403);
于 2014-06-05T15:40:46.217 に答える
0

Google Webmaster Tools を快適に保つために、ヘッダーで次を検出して使用します。

META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"
于 2014-11-27T01:17:13.040 に答える
0

コントローラ メソッドは常に応答を返す必要があります。しかし、コンストラクターからの応答を返すことはできないと思います。フィルターを使用する必要があります。

于 2013-02-05T10:34:22.820 に答える