Laravel - Return json along with http status code

148,403

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);
Share:
148,403

Related videos on Youtube

Galivan
Author by

Galivan

Updated on December 15, 2021

Comments

  • Galivan
    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
    Mladen Janjetovic over 8 years
    Keep 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
    DJC almost 8 years
    @timeNomad What are the pros and cons of these two methods - which is recommended?
  • Jonathan
    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
    Maytham Fahmi over 7 years
    + (201) this answer safes my evening :)
  • Marcelo Agimóvel
    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
    jjmu15 almost 4 years
    Thanks, 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
    jjmu15 almost 4 years
    Nevermind... found it. Here is a complete list for anyone else who may be looking for it: gist.github.com/jeffochoa/a162fc4381d69a2d862dafa61cda0798
  • Derk Jan Speelman
    Derk Jan Speelman over 3 years
    use Illuminate\Http\Response; and return new Response(['message' => 'test'], 422); worked for me
  • Faiyaj
    Faiyaj over 2 years
    this one is helpful ! Thanks :)