Laravel-http 상태 코드와 함께 json 반환


85

객체를 반환하면 :

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

상태 코드는 200이됩니다. 메시지와 함께 201로 변경하고 json 객체와 함께 보내려면 어떻게해야합니까?

라 라벨에서 상태 코드를 설정하는 방법이 있는지 모르겠습니다.

답변:


114

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

3
명심 심포니 \ 구성 요소 \ HttpFoundation \ 응답이 HTTP 상태 코드에 대한 자신의 미리 정의 된 상수를 가지고, 당신은 세트 상태로 할 경우 뭔가 그것에 가까이 ... 즉,로 상태를 변경할 것보다 다른 사용하는 경우 449 , 항상 500
Mladen Janjetovic

2
@Tushar 데이터를 다시 보내지 않고 200 개의 응답 만 보내면 어떻게됩니까? 가 response()->json([], 200);목적에 맞는이 상황에서? 아니면 200이 암시 적입니까?
Jonathan

+ (201)이 응답 금고 내 저녁 :
maytham-ɯɐɥʇʎɐɯ

use Illuminate\Http\Response;그리고 return new Response(['message' => 'test'], 422);나를 위해 일했습니다
Derk Jan Speelman

64

이것이 Laravel 5에서 수행하는 방법입니다.

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

또는 도우미 기능 사용 :

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

1
@timeNomad이 두 가지 방법의 장단점은 무엇입니까?
DJC

2
첫 번째 방법에서 @DJC를 사용하면 Response ::를 여러 번 사용할 수 있습니다. 두 번째 메서드에서는 response ()->를 사용할 때마다 해당 클래스를 호출합니다 (하나만 사용하는 경우 문제 없음).
Marcelo Agimóvel

32

귀하의 응답을 단일 통제하에 유지하는 것이 더 나은 관행이라고 생각하며 이러한 이유로 가장 공식적인 해결책을 찾았습니다.

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

namespace선언 후에 이것을 추가하십시오 .

use Illuminate\Http\Response;

감사합니다. 이에 대한 참고 자료를 찾고있었습니다. 200 (HTTP_OK)뿐만 아니라 201, 400 등과 같은 사용 가능한 다른 응답 이름에 대한 링크가 있습니까? 인터넷 검색을 시도했지만 아직 찾지 못했습니다!
jjmu15

1
신경 쓰지 마 .. 찾았 어. 다음은 그것을 찾는 다른 사람들을위한 완전한 목록입니다 : gist.github.com/jeffochoa/a162fc4381d69a2d862dafa61cda0798
jjmu15

12

여러 가지 방법이 있습니다

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

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

여기서 STATUS_CODE는 보내려는 HTTP 상태 코드입니다. 둘 다 동일합니다.

Eloquent 모델을 사용하는 경우 기본적으로 간단한 반환도 JSON 으로 자동 변환됩니다 .

return User::all();

2
return response(['title' => trans('web.errors.duplicate_title')], 422); //Unprocessable Entity

내 대답이 도움이 되었기를 바랍니다.


0

나는 응답 도우미를 선호합니다.

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

0

그것은 함께 할 것이 낫다 도우미 기능 보다는 외관 . 이 솔루션은 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

0

laravel 7. * JSON RESPONSE 를 지정할 필요가 없습니다. 자동으로 JSON 으로 변환되기 때문입니다.

return response(['Message'=>'Wrong Credintals'], 400);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.