简体   繁体   English

Laravel - 返回 json 和 http 状态码

[英]Laravel - Return json along with http status code

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?.状态代码将为 200。如何将其更改为 201,并带有消息并与 json 对象一起发送?。

I don't know if there is a way to just set the status code in Laravel.我不知道有没有办法在 Laravel 中设置状态码。

You can use http_response_code() to set HTTP response code.您可以使用http_response_code()设置 HTTP 响应代码。

If you pass no parameters then http_response_code will get the current status code.如果不传递任何参数,则 http_response_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 ):对于 Laravel(参考自: https ://stackoverflow.com/a/14717895/2025923):

return Response::json([
    'hello' => $value
], 201); // Status code here

This is how I do it in Laravel 5这就是我在 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:namespace声明之后添加:

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.其中 STATUS_CODE 是您要发送的 HTTP 状态代码。 Both are identical.两者是相同的。

if you are using Eloquent model, then simple return will also be auto converted in JSON by default like,如果您使用的是 Eloquent 模型,那么默认情况下,简单返回也将自动转换为 JSON ,例如,

return User::all();

laravel 7.* 您不必指定 JSON RESPONSE因为它会自动将其转换为JSON

return response(['Message'=>'Wrong Credintals'], 400);
return response(['title' => trans('web.errors.duplicate_title')], 422); //Unprocessable Entity

希望我的回答有帮助。

It's better to do it with helper functions rather than Facades .最好使用辅助函数而不是Facades 来完成 This solution will work well from Laravel 5.7 onwards此解决方案从Laravel 5.7 开始运行良好

//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

我自己更喜欢响应助手:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM