簡體   English   中英

在 Laravel 中返​​回 ResourceCollection 時如何返回 HTTP 狀態碼

[英]How to return HTTP status code when returning a ResourceCollection in Laravel

我正在構建一個 API,我正在嘗試為 Laravel 中的教室返回一個 ResourceCollection。

以前我使用了一個教室數組,並返回了一個包含數組和狀態代碼的響應,如下所示:

$classrooms=Classroom::all();
return response()->json($classrooms,200);

現在這是我的代碼:

$classrooms = new ClassroomCollection(Classroom::paginate(10));
   return $classrooms;

得到這個回應:

"data": [classrooms array],
"links": {
        "first": "http://127.0.0.1:8000/api/classrooms ?page=1",
        "last": "http://127.0.0.1:8000/api/classrooms ?page=1",
        "prev": null,
        "next": null
         },
"meta": {
        "current_page": 1,
        "from": null,
        "last_page": 12,
        "path": "http://127.0.0.1:8000/api/classrooms ",
        "per_page": 10,
        "to": null,
        "total": 0
         }

而且我找不到將狀態代碼與 ClassroomCollection 一起發送的方法,因為如果我這樣做了

return response()->json($classrooms,200);

我只返回了“數據”對象,沒有分頁器的鏈接和元數據。

有什么幫助嗎?

您可以像這樣覆蓋集合中的 withResponse 函數:

public function withResponse($request, $response)
{
    if($response->getData()) {
        $response->setStatusCode(200);
    } else{
        $response->setStatusCode(404);
    }
    parent::withResponse($request, $response);
}

如果你真的想要,你可以執行以下操作:

return response()->json($classrooms->jsonSerialize(), 200);

->jsonSerialize()實際上並不序列化為 JSON 字符串,而是返回一個可以序列化為 JSON 字符串的數組。 如果您從控制器/路由返回一個數組或JsonSerializable對象,那么 Laravel 將序列化為 JSON 響應,而這正是分頁器實現的

但是,如果200是您想要的狀態代碼,則這是隱含的默認狀態代碼,無需提供。

所以上面的等價於:

return $classrooms;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM