返回 json 和 HTTP状态码

如果返回一个对象:

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?.

我不知道是否有办法在 Laravel 设置状态码。

168081 次浏览

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

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

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

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;
return response(['title' => trans('web.errors.duplicate_title')], 422); //Unprocessable Entity

Hope my answer was helpful.

I prefer the response helper myself:

    return response()->json(['message' => 'Yup. This request succeeded.'], 200);

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 always use this type of json response format, this will help you...

return response()->json(['success'=>'true','message' => 'Successfully Done.'], 200);