2015-06-30 8 views
33

Wenn ich wieder ein Objekt:Laravel - json Rückkehr zusammen mit HTTP-Statuscode

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

der Statuscode wird 200 sein Wie kann ich es mit einer Nachricht zu 201 ändern und es mit dem JSON-Objekt senden ?.

Ich weiß nicht, ob es eine Möglichkeit gibt, nur den Statuscode in Laravel zu setzen.

Antwort

53

Sie können http_response_code() verwenden, um den HTTP-Antwortcode festzulegen.

Wenn Sie keine Parameter übergeben, erhält http_response_code den aktuellen Statuscode. Wenn Sie einen Parameter übergeben, wird der Antwortcode festgelegt.

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

Für Laravel (Referenz aus: https://stackoverflow.com/a/14717895/2025923):

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

Beachten Sie, dass ** Symfony \ Component \ HttpFoundation \ Response-** hat seine eigene vordefinierte Konstanten für HTTP-Statuscodes, und wenn Sie andere verwenden als dass es deinen Status in etwas ändern wird ... wenn du zum Beispiel den Status ** 449 ** setzen willst, bekommst du immer den Status ** 500 ** –

+2

@Tushar was ist, wenn ich keine schicken will Daten zurück, nur eine 200 Antwort? Ist 'Antwort() -> Json ([], 200)' 'geeignet für den Zweck in dieser Situation? Oder ist 200 implizit? – Jonathan

+0

+ (201) diese Antwort schützt meinen Abend :) –

26

Dies ist, wie ich es in Laravel tun 5

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

Oder die Antwort Helfer ohne eine Klasse zu importieren: return response() -> json (['Hallo' => $ value], 201); –

+1

@timeNomad Was sind die Vor- und Nachteile dieser beiden Methoden - welche wird empfohlen? – DJC

2

Es gibt mehrere Möglichkeiten

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

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

Dabei ist STATUS_CODE Ihr HTTP-Statuscode, den Sie senden möchten. Beide sind identisch.

wenn Sie Eloquent Modell verwenden, dann einfache Rückkehr wird Auto sein auch wie in JSON standardmäßig umgewandelt,

return User::all(); 
+1

'$ response()' wird einen Fehler verursachen. Es sollte "response()" sein – Amr

7

Ich denke, es ist besser Praxis ist Ihre Antwort, die einer einheitlichen Kontrolle zu halten und für diese Grund habe ich die offizielle Lösung gefunden.

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

fügen Sie diese nach namespace Erklärung:

use Illuminate\Http\Response;