Laravel - Return json along with http status code
Solution 1
You can use http_response_code()
to set HTTP response code.
If you pass no parameters then http_response_code will get the current status code. If you pass a parameter it will set the response code.
http_response_code(201); // Set response status code to 201
For Laravel(Reference from: https://stackoverflow.com/a/14717895/2025923):
return Response::json([
'hello' => $value
], 201); // Status code here
Solution 2
This is how I do it in Laravel 5
return Response::json(['hello' => $value],201);
Or using a helper function:
return response()->json(['hello' => $value], 201);
Solution 3
I think it is better practice to keep your response under single control and for this reason I found out the most official solution.
response()->json([...])
->setStatusCode(Response::HTTP_OK, Response::$statusTexts[Response::HTTP_OK]);
add this after namespace
declaration:
use Illuminate\Http\Response;
Solution 4
There are multiple ways
return \Response::json(['hello' => $value], STATUS_CODE);
return response()->json(['hello' => $value], STATUS_CODE);
where STATUS_CODE is your HTTP status code you want to send. Both are identical.
if you are using Eloquent model, then simple return will also be auto converted in JSON by default like,
return User::all();
Solution 5
laravel 7.* You don't have to speicify JSON RESPONSE cause it's automatically converted it to JSON
return response(['Message'=>'Wrong Credintals'], 400);
Related videos on Youtube
Galivan
Updated on December 15, 2021Comments
-
Galivan over 2 years
If I return an object:
return Response::json([ 'hello' => $value ]);
the status code will be 200. How can I change it to 201, with a message and send it with the json object?.
I don't know if there is a way to just set the status code in Laravel.
-
Mladen Janjetovic over 8 yearsKeep in mind that Symfony\Component\HttpFoundation\Response has its own predefined constants for http status codes, and if you use other than that it will change your status into something close to it... i.e. if you want to set status 449, you will always get status 500
-
DJC almost 8 years@timeNomad What are the pros and cons of these two methods - which is recommended?
-
Jonathan almost 8 years@Tushar what if I don't want to send any data back, just a 200 response? Is
response()->json([], 200);
fit for purpose in this situation? Or is 200 implicit? -
Maytham Fahmi over 7 years+ (201) this answer safes my evening :)
-
Marcelo Agimóvel about 6 years@DJC on first method you will be able to use Response:: several times loading only once. On second method you will call that class to each time you use response()-> (no problem if you'll use only one).
-
jjmu15 almost 4 yearsThanks, I was looking for a reference to this. Do you happen to have a link to the other available response names such as 201, 400 etc and not just the 200 (HTTP_OK)? I've tried googling it but haven't been able to find it quite yet!
-
jjmu15 almost 4 yearsNevermind... found it. Here is a complete list for anyone else who may be looking for it: gist.github.com/jeffochoa/a162fc4381d69a2d862dafa61cda0798
-
Derk Jan Speelman over 3 years
use Illuminate\Http\Response;
andreturn new Response(['message' => 'test'], 422);
worked for me -
Faiyaj over 2 yearsthis one is helpful ! Thanks :)