Laravel-返回json和http状态码


85

如果我返回一个对象:

return Response::json([
    'hello' => $value
]);

状态代码将为200。如何将其更改为201,并显示一条消息并与json对象一起发送?

我不知道是否有一种方法可以在Laravel中设置状态代码。

Answers:


114

您可以http_response_code()用来设置HTTP响应代码。

如果未传递任何参数,则http_response_code将获取当前状态码。如果您传递参数,它将设置响应代码。

http_response_code(201); // Set response status code to 201

对于Laravel(参考来自:https : //stackoverflow.com/a/14717895/2025923 ):

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

3
请记住,Symfony \ Component \ HttpFoundation \ Response具有用于HTTP状态代码的自己的预定义常量,如果您使用其他常量,则会将您的状态更改为接近它的状态……即,如果您要设置状态449,您将始终获得状态500
Mladen Janjetovic

2
@Tushar如果我不想发送任何数据,而只是200个响应,该怎么办?response()->json([], 200);在这种情况下是否适合目的?还是200隐式?
乔纳森

+(201)这个答案保险箱我晚上:)
maytham-ɯɐɥʇʎɐɯ

use Illuminate\Http\Response;return new Response(['message' => 'test'], 422);为我工作
德克·扬Speelman

64

这就是我在Laravel 5中所做的

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

或使用辅助功能:

return response()->json(['hello' => $value], 201); 

1
@timeNomad这两种方法的优点和缺点-建议使用哪种方法?
DJC

2
@DJC在第一种方法上,您将能够使用Response ::几次,仅加载一次。在第二种方法上,每次使用response()->时,您都将调用该类(如果仅使用一个,则没有问题)。
MarceloAgimóvel18年

32

我认为最好的方法是将您的回复置于单一控制之下,因此,我找到了最官方的解决方案。

response()->json([...])
    ->setStatusCode(Response::HTTP_OK, Response::$statusTexts[Response::HTTP_OK]);

namespace声明后添加以下内容:

use Illuminate\Http\Response;

谢谢,我正在寻找对此的参考。您是否碰巧链接到其他可用的响应名称,例如201、400等,而不仅仅是200(HTTP_OK)?我已经尝试使用Google搜索,但还没有找到它!
jjmu15

1
没关系...找到了。这是所有可能正在寻找它的人的完整列表:gist.github.com/jeffochoa/a162fc4381d69a2d862dafa61cda0798
jjmu15

12

有多种方法

return \Response::json(['hello' => $value], STATUS_CODE);

return response()->json(['hello' => $value], STATUS_CODE);

其中STATUS_CODE是您要发送的HTTP状态代码。两者是相同的。

如果您使用的是Eloquent模型,则默认情况下,简单返回也将自动以JSON格式转换,例如,

return User::all();


0

我自己更喜欢响应助手:

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

0

最好使用助手功能而不是Facades来完成。从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

0

laravel 7. *您不必专门化JSON RESPONSE,因为它会自动将其转换为JSON

return response(['Message'=>'Wrong Credintals'], 400);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.