Jeśli zwrócę przedmiot:
return Response::json([
'hello' => $value
]);
kod statusu to 200. Jak mogę zmienić go na 201, z komunikatem i wysłać go z obiektem json ?.
Nie wiem, czy istnieje sposób, aby po prostu ustawić kod statusu w Laravel.
Odpowiedzi:
Możesz użyć http_response_code()
do ustawienia kodu odpowiedzi HTTP.
Jeśli nie przekażesz żadnych parametrów, kod http_response_code otrzyma aktualny kod stanu. Jeśli przekażesz parametr, ustawi on kod odpowiedzi.
http_response_code(201); // Set response status code to 201
Dla Laravel (źródło z: https://stackoverflow.com/a/14717895/2025923 ):
return Response::json([
'hello' => $value
], 201); // Status code here
response()->json([], 200);
nadaje się do celu w tej sytuacji? Czy może 200 jest ukryta?
use Illuminate\Http\Response;
i return new Response(['message' => 'test'], 422);
pracował dla mnie
Tak to robię w Laravel 5
return Response::json(['hello' => $value],201);
Lub używając funkcji pomocniczej:
return response()->json(['hello' => $value], 201);
Myślę, że lepszą praktyką jest trzymanie odpowiedzi pod jedną kontrolą iz tego powodu znalazłem najbardziej oficjalne rozwiązanie.
response()->json([...])
->setStatusCode(Response::HTTP_OK, Response::$statusTexts[Response::HTTP_OK]);
dodaj to po namespace
deklaracji:
use Illuminate\Http\Response;
Jest wiele sposobów
return \Response::json(['hello' => $value], STATUS_CODE);
return response()->json(['hello' => $value], STATUS_CODE);
gdzie STATUS_CODE to kod statusu HTTP, który chcesz wysłać. Obie są identyczne.
jeśli używasz modelu Eloquent, prosty zwrot również zostanie domyślnie automatycznie przekonwertowany na JSON , np.
return User::all();
return response(['title' => trans('web.errors.duplicate_title')], 422); //Unprocessable Entity
Mam nadzieję, że moja odpowiedź była pomocna.
Sam wolę pomocnika odpowiedzi:
return response()->json(['message' => 'Yup. This request succeeded.'], 200);
Lepiej jest to zrobić za pomocą funkcji pomocniczych niż Fasady . To rozwiązanie będzie działać dobrze od Laravel 5.7 i nowszych
//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