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.
This question is related to
php
json
laravel
http-status-codes
http-status-code-415
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
laravel 7.* You don't have to speicify JSON RESPONSE cause it's automatically converted it to JSON
return response(['Message'=>'Wrong Credintals'], 400);
I prefer the response helper myself:
return response()->json(['message' => 'Yup. This request succeeded.'], 200);
return response(['title' => trans('web.errors.duplicate_title')], 422); //Unprocessable Entity
Hope my answer was helpful.
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);
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;
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();
Source: Stackoverflow.com