Laravel - Return json along with http status code

PhpJsonLaravelHttp Status-Codes

Php 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);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGalivanView Question on Stackoverflow
Solution 1 - PhpTusharView Answer on Stackoverflow
Solution 2 - PhpJeremy C.View Answer on Stackoverflow
Solution 3 - PhpTKoutsouView Answer on Stackoverflow
Solution 4 - PhpiSensicalView Answer on Stackoverflow
Solution 5 - PhpMikayel MargaryanView Answer on Stackoverflow
Solution 6 - PhpABO YAZANView Answer on Stackoverflow
Solution 7 - PhpSoftware DeveloperView Answer on Stackoverflow
Solution 8 - PhpDylan PierceView Answer on Stackoverflow