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

लारवेल के लिए (संदर्भ: https://stackoverflow.com/a/14717895/2025923 ):

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

3
ध्यान रखें कि Symfony \ Component \ HttpFoundation \ Response के पास http स्थिति कोड के लिए अपने स्वयं के पूर्वनिर्धारित स्थिरांक हैं, और यदि आप इसके अलावा अन्य का उपयोग करते हैं, तो यह आपकी स्थिति को इसके कुछ पास में बदल देगा ... अर्थात यदि आप स्थिति 449 सेट करना चाहते हैं , आपको हमेशा स्थिति 500
मिलेंगी

2
@ तुषार अगर मैं किसी भी डेटा को वापस नहीं भेजना चाहता, तो बस 200 का जवाब? क्या response()->json([], 200);इस स्थिति में उद्देश्य के लिए फिट है? या 200 निहित है?
जोनाथन

+ (201) यह जवाब मेरी शाम को सुरक्षित करता है :)
मेथम-23

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 इन दो विधियों के पेशेवरों और विपक्ष क्या हैं - जिनकी सिफारिश की जाती है?
डीजेसी

2
पहली विधि पर @DJC आप प्रतिक्रिया का उपयोग करने में सक्षम होंगे :: कई बार केवल एक बार लोड हो रहा है। दूसरी विधि पर आप उस वर्ग को हर बार जब आप प्रतिक्रिया () -> का उपयोग करते हैं (कोई समस्या नहीं है यदि आप केवल एक का उपयोग करेंगे)।
मार्सेलो एग्मोवेल

32

मुझे लगता है कि अपनी प्रतिक्रिया को एकल नियंत्रण में रखना बेहतर अभ्यास है और इस कारण से मुझे सबसे आधिकारिक समाधान का पता चला।

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

namespaceघोषणा के बाद इसे जोड़ें :

use Illuminate\Http\Response;

धन्यवाद, मैं इस संदर्भ के लिए देख रहा था। क्या आपके पास अन्य उपलब्ध प्रतिक्रिया नामों जैसे कि 201, 400 आदि का लिंक होना चाहिए और न कि केवल 200 (HTTP_OK)? मैंने इसे गुगली करने की कोशिश की है, लेकिन अभी तक इसे ढूंढ नहीं पाया है!
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 स्थिति कोड है जिसे आप भेजना चाहते हैं। दोनों एक समान हैं।

यदि आप एलोकेंट मॉडल का उपयोग कर रहे हैं, तो साधारण रिटर्न भी JSON में ऑटो डिफ़ॉल्ट रूप से परिवर्तित हो जाएगा ,

return User::all();



0

बेहतर होगा कि इसे फेशियल के बजाय हेल्पर फंक्शन्स के साथ करें । यह समाधान लारवेल 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

लार्वा 7. * आपको JSON RESPONSE के बारे में बताने की जरूरत नहीं है क्योंकि यह स्वतः ही इसे JSON में बदल देता है

return response(['Message'=>'Wrong Credintals'], 400);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.