Как вернуть код состояния HTTP при возврате ResourceCollection в Laravel - PullRequest
2 голосов
/ 23 января 2020

Я создаю API и пытаюсь вернуть ResourceCollection для класса в Laravel.

Ранее я использовал массив классов и возвратил ответ с массивом и кодом состояния, например:

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

, я вернул только объект «data», без ссылок и мета пагинатора.

Любая помощь?

Ответы [ 2 ]

2 голосов
/ 23 января 2020

вы можете переопределить функцию withResponse в вашей коллекции следующим образом:

public function withResponse($request, $response)
{
    if($response->getData()) {
        $response->setStatusCode(200);
    } else{
        $response->setStatusCode(404);
    }
    parent::withResponse($request, $response);
}
0 голосов
/ 23 января 2020

Если вы действительно хотите, вы можете сделать следующее:

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

->jsonSerialize() фактически не сериализуется как строка JSON, но возвращает массив, который можно сериализовать в JSON строка Laravel сериализуется в ответ JSON, если вы возвращаете массив или JsonSerializable способный объект из контроллера / маршрута, и это то, что paginator реализует .

Однако, если 200 - это требуемый код состояния, подразумевается и код состояния по умолчанию, и нет необходимости его предоставлять.

Таким образом, вышеприведенное равно:

return $classrooms;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...