Laravel - Return json along with http status code
PhpJsonLaravelHttp Status-CodesPhp Problem Overview
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.
Php Solutions
Solution 1 - Php
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 - Php
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 - Php
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 - Php
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 - Php
return response(['title' => trans('web.errors.duplicate_title')], 422); //Unprocessable Entity
Hope my answer was helpful.
Solution 6 - Php
laravel 7.* You don't have to speicify JSON RESPONSE cause it's automatically converted it to JSON
return response(['Message'=>'Wrong Credintals'], 400);
Solution 7 - Php
It's better to do it with helper functions rather than Facades. This solution will work well from Laravel 5.7 onwards
//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
Solution 8 - Php
I prefer the response helper myself:
return response()->json(['message' => 'Yup. This request succeeded.'], 200);