Laravel - вернуть json вместе с кодом статуса http

30

Если я возвращаю объект:

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

код статуса будет 200. Как я могу изменить его на 201, с сообщением и отправить его с помощью json-объекта?.

Я не знаю, есть ли способ установить код состояния в Laravel.

Теги:
http-status-codes

4 ответа

49
Лучший ответ

Вы можете использовать http_response_code() для установки кода ответа HTTP.

Если вы не передадите никаких параметров, то http_response_code получит текущий код состояния. Если вы передадите параметр, он установит код ответа.

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

Для Laravel (Ссылка от: https://stackoverflow.com/questions/14704644/laravel-wont-obey-status-code):

return Response::json([
    'hello' => $value
], 201); // Status code here
  • 2
    Имейте в виду, что Symfony \ Component \ HttpFoundation \ Response имеет свои собственные предопределенные константы для кодов состояния http, и если вы используете другое значение, оно изменит ваш статус на что-то близкое к нему ... т.е. если вы хотите установить статус 449 , вы всегда получите статус 500
  • 2
    @ Тушар, что если я не хочу отправлять какие-либо данные, только ответ 200? Является ли response()->json([], 200); подходит для цели в этой ситуации? Или 200 неявных?
Показать ещё 1 комментарий
25

Вот как я это делаю в Laravel 5

return Response::json(['hello' => $value],201);
  • 1
    @timeNomad Каковы плюсы и минусы этих двух методов - что рекомендуется?
  • 0
    @DJC при первом способе вы сможете использовать Response :: несколько раз, загружая только один раз. Во втором методе вы будете вызывать этот класс каждый раз, когда будете использовать response () -> (нет проблем, если вы будете использовать только один).
5

Я считаю, что лучше всего держать свой ответ под единым контролем, и по этой причине я нашел наиболее официальное решение.

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

добавить это после объявления namespace:

use Illuminate\Http\Response;
0

Существует несколько способов

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

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

где STATUS_CODE - ваш код статуса HTTP, который вы хотите отправить. Оба идентичны.

если вы используете модель Eloquent, тогда простой возврат также будет автоматически преобразован в JSON по умолчанию, например,

return User::all();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню