मैं एक आरईएसटी वेब सेवा बनाने की कोशिश कर रहा हूं जो सभी कॉल के लिए जेएसओएन देता है। आम तौर पर यह बिल्कुल स्पष्ट है, मैं सिर्फ इस तरह कार्य करें:Symfony2 नियंत्रक कार्रवाई में उत्पन्न होने वाले सभी अपवादों को कैसे पकड़ें?
return new Response(json_encode($return_object));
मेरा प्रश्न, मैं कैसे एक वैश्विक तरह से अपवाद रोकना चाहिए? मैं ऐसा करना चाहता हूं, क्योंकि अगर मेरे आवेदन में कोई अपवाद होता है, तो भी मैं क्लाइंट को एक JSON संदेश वापस लौटना चाहूंगा जो मूल रूप से "यो दाग, मैंने आपको अपवादों की तरह सुना है"। मेरी सोच यह है कि सफलता और विफलता दोनों मामलों में जेएसओएन लौटने से वह काम आसान हो जाएगा जो किसी भी क्लाइंट को मेरे एपीआई को लागू करने के लिए करना है।
अब तक, केवल एक चीज मैं के बारे में सोच सकते हैं इस तरह हर नियंत्रक कार्रवाई लिखने के लिए है:
public function generateMemeAction($arg1, $arg2) {
$return_object = array();
try {
// stuff to generate meme here
$return_object['status'] = "GREAT SUCCESS!";
} catch (Exception $e) {
// epic fail
$return_object['status'] = "UnluckyBrianException";
}
return new Response(json_encode($return_object));
}
कौन सा सभी महान और अद्भुत है, लेकिन यह कोशिश-कैच ब्लॉक हर कार्रवाई के लिए ही होगा मेरे ऐप में, और जब भी मुझे प्रतिलिपि पास्ता के गुच्छा के आसपास संपादित करना होता है तो मैं मूर्खतापूर्ण महसूस करूंगा। प्रो टिप्स?
बहुत बढ़िया! धन्यवाद Evgeny, जो वास्तव में चीजों को साफ़ करता है। थोड़ा और खोदने के बारे में और मुझे पता चला कि उस घटना में फ़ंक्शन की सदस्यता कैसे लें: http://symfony.com/doc/current/cookbook/service_container/event_listener.html – robertdfrench
आप अनुरोध का निरीक्षण करके सशर्त रूप से JSON स्वरूपण भी लागू कर सकते हैं हेडर और जल्दी लौट रहे हैं: 'अगर (! $ event-> getRequest() -> हेडर-> में शामिल है (' स्वीकार करें ',' एप्लिकेशन/जेसन ')) वापसी; ' – Tamlyn