Laravel-httpステータスコードとともにjsonを返します


86

オブジェクトを返す場合:

return Response::json([
    'hello' => $value
]);

ステータスコードは200になります。メッセージを付けて201に変更し、jsonオブジェクトと一緒に送信するにはどうすればよいですか。

Laravelでステータスコードを設定する方法があるかどうかはわかりません。

回答:


117

を使用http_response_code()してHTTP応答コードを設定できます。

パラメータを渡さない場合、http_response_codeは現在のステータスコードを取得します。パラメータを渡すと、応答コードが設定されます。

http_response_code(201); // Set response status code to 201

Laravelの場合(参照元:https//stackoverflow.com/a/14717895/2025923):

return Response::json([
    'hello' => $value
], 201); // Status code here

3
ことを覚えておいてくださいsymfonyの\コンポーネント\ HttpFoundation \レスポンスのHTTPステータスコードについて独自の定義済みの定数を持っており、あなたがそれ以外を使用する場合は、セットの状態にしたい場合は、それはそれに近いもの...すなわちにあなたのステータスを変更します449、常にステータス500を
Mladen Janjetovic 2015年

2
@Tusharデータを送り返したくない場合は、200応答だけですか?あるresponse()->json([], 200);目的のための適合は、このような状況では?それとも200は暗黙的ですか?
ジョナサン

+(201)この回答の金庫私の夜:)
maytham-ɯɐɥʇʎɐɯ

use Illuminate\Http\Response;そしてreturn new Response(['message' => 'test'], 422);私のために働いた
Derk JanSpeelman20年

65

これが私がLaravel5でそれを行う方法です

return Response::json(['hello' => $value],201);

またはヘルパー関数を使用する:

return response()->json(['hello' => $value], 201); 

1
@timeNomadこれら2つの方法の長所と短所は何ですか?どちらが推奨されますか?
DJC 2016

2
@DJCは、最初のメソッドでResponse ::を使用できるようになります。2番目のメソッドでは、response()->を使用するたびにそのクラスを呼び出します(1つだけを使用する場合は問題ありません)。
マルセロアギモベル2018

33

私はあなたの応答を単一の制御下に保つことがより良い習慣であると思います、そしてこの理由で私は最も公式な解決策を見つけました。

response()->json([...])
    ->setStatusCode(Response::HTTP_OK, Response::$statusTexts[Response::HTTP_OK]);

namespace宣言後にこれを追加します。

use Illuminate\Http\Response;

おかげで、私はこれへの参照を探していました。200(HTTP_OK)だけでなく、201、400などの他の利用可能な応答名へのリンクがありますか?グーグルしてみましたが、まだ見つかりませんでした!
jjmu 1520年

1
気にしないでください...それを見つけました。これは、それを探している可能性のある他の人のための完全なリストです:gist.github.com/jeffochoa/a162fc4381d69a2d862dafa61cda0798
jjmu

13

複数の方法があります

return \Response::json(['hello' => $value], STATUS_CODE);

return response()->json(['hello' => $value], STATUS_CODE);

ここで、STATUS_CODEは、送信するHTTPステータスコードです。どちらも同じです。

Eloquentモデルを使用している場合、単純なリターンもデフォルトでJSONに自動変換されます

return User::all();



0

ファサードよりもヘルパー関数を使用することをお勧めします。このソリューションは、Laravel5.7以降でうまく機能します

//import dependency
use Illuminate\Http\Response;

//snippet
return \response()->json([
   'status' => '403',//sample entry
   'message' => 'ACCOUNT ACTION HAS BEEN DISABLED',//sample message
], Response::HTTP_FORBIDDEN);//Illuminate\Http\Response sets appropriate headers

0

laravel 7.あなたはJSONのspeicifyする必要はありません*応答を、それが自動的にそれを変換しています原因JSON

return response(['Message'=>'Wrong Credintals'], 400);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.