it-roy-ru.com

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

Если я верну объект:

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

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

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

45
Galivan

Вы можете использовать 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
80
Tushar

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

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

Или с помощью вспомогательной функции:

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

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

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

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

use Illuminate\Http\Response;
20
TKoutsou

Есть несколько способов 

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

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

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

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

return User::all();
8
iSensical
return response(['title' => trans('web.errors.duplicate_title')], 422); //Unprocessable Entity

Надеюсь, мой ответ был полезным.

1
Mikayel Margaryan

Вот правильный способ отправить правильный код ответа в качестве ответа

return http_response_code();
0
Muhammad Owais

Я предпочитаю ответ помощник сам:

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