Якщо я повертаю об'єкт:
return Response::json([
'hello' => $value
]);
код стану буде 200. Як я можу змінити його на 201, із повідомленням і надіслати його з об’єктом json ?.
Я не знаю, чи є спосіб просто встановити код стану в Laravel.
Відповіді:
Ви можете використовувати 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
response()->json([], 200);
придатна ціль у цій ситуації? Або 200 неявно?
use Illuminate\Http\Response;
і return new Response(['message' => 'test'], 422);
працював у мене
Ось як я це роблю в Laravel 5
return Response::json(['hello' => $value],201);
Або за допомогою допоміжної функції:
return response()->json(['hello' => $value], 201);
Я думаю, що є кращою практикою тримати вашу відповідь під єдиним контролем, і з цієї причини я знайшов найбільш офіційне рішення.
response()->json([...])
->setStatusCode(Response::HTTP_OK, Response::$statusTexts[Response::HTTP_OK]);
додайте це після namespace
декларації:
use Illuminate\Http\Response;
Існує кілька способів
return \Response::json(['hello' => $value], STATUS_CODE);
return response()->json(['hello' => $value], STATUS_CODE);
де STATUS_CODE - ваш код стану HTTP, який ви хочете надіслати. Обидва ідентичні.
якщо ви використовуєте модель Eloquent, то просте повернення також буде автоматично перетворено в JSON за замовчуванням, наприклад,
return User::all();
return response(['title' => trans('web.errors.duplicate_title')], 422); //Unprocessable Entity
Сподіваюся, моя відповідь була корисною.
Я віддаю перевагу помічнику відповіді сам:
return response()->json(['message' => 'Yup. This request succeeded.'], 200);
Краще це робити з допоміжними функціями, а не з фасадами . Це рішення буде добре працювати з 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