2013-10-14 12 views
7

मेरे पास एक तरीका है जो जांचता है कि उपयोगकर्ता के पास वैध सत्र जानकारी है या नहीं। यह एक अपवाद, Guzzle\Http\Exception\BadResponseException फेंकने के लिए माना जाता है, लेकिन जब मैं इसे पकड़ने की कोशिश: औरलार्वा अपवाद हैंडलिंग को कैसे बाईपास करें

catch (Guzzle\Http\Exception\BadResponseException $e) 
{ 
    return false; 
} 
return true 

Laravel इस कोड को नहीं मिलता है उसे तुरंत खुद त्रुटि हैंडलिंग है शुरू होता है। और Laravels को कार्यान्वित करने और अपने खुद के कैच का उपयोग करने के तरीके पर विचार।

संपादित करें: मुझे पता चला है कि लैरावेल उसी अपवाद हैंडलर को सिम्फनी के रूप में उपयोग करता है, इसलिए मैंने सिम्फनी 2 टैग भी जोड़ा।

संपादित करें 2:

मैं इन सबसे छुटकारा अपवाद Guzzle अक्षम करने और मैन्युअल रूप से वापसी हेडर की जाँच करके समस्या का समाधान हो। यह एक छोटा सा कट है लेकिन इस मामले में, यह नौकरी करता है। प्रतिक्रियाओं के लिए धन्यवाद!

+0

आप पोस्ट कर सकते हैं ('try' ब्लॉक सहित) अधिक प्रासंगिक कोड –

उत्तर

9

वास्तव में इस अपवाद Laravel में catched किया जा सकता है, तो आप सिर्फ सम्मान करने के लिए है (और समझने) नेमस्पेसिंग:

आप

namespace App; 

है और आप

catch (Guzzle\Http\Exception\BadResponseException $e) 

पीएचपी समझता करते हैं कि आप

catch (\App\Guzzle\Http\Exception\BadResponseException $e) 
की कोशिश कर रहे हैं

इसलिए, यह काम करने के लिए आप सिर्फ एक जड़ स्लैश की जरूरत है:

catch (\Guzzle\Http\Exception\BadResponseException $e) 

और यह काम करेंगे।

+0

इस पर वापस देखकर आप पूरी तरह से सही हैं! – Martijn

+1

वाह !! तो आपको नेमस्पेसिंग कैच (अपवाद ई) काम नहीं करना चाहिए, इसे पकड़ना चाहिए (\ Exception e) – manish

2

डिफ़ॉल्ट रूप से, app/start/global.php फ़ाइल में सभी अपवादों के लिए एक त्रुटि हैंडलर है। हालांकि, यदि आवश्यक हो तो आप अधिक हैंडलर निर्दिष्ट कर सकते हैं। हैंडलर को वे अपवाद के type-hint के आधार पर बुलाया जाता है। उदाहरण के लिए, आप इसके अलावा एक हैंडलर है कि केवल अपने BadResponseException उदाहरणों संभालती है,

App::error(function(Guzzle\Http\Exception\BadResponseException $exception) 
{ 
    // Handle the exception... 
    return Response::make('Error! ' . $exception->getCode()); 
}); 

की तरह बना सकते हैं, सुनिश्चित करें कि आप एक अच्छी तरह से परिभाषित (BadResponseException) वर्ग ले ली है। Laravel Documentation पर और पढ़ें।

+2

** नोट: ** कि Laravel जब तक एक एक' Response' ऑब्जेक्ट पंजीकृत संचालकों को त्रुटि से निपटने की जिम्मेदारी पारित करने के लिए जारी रहेगा । लार्वेल [जिम्मेदारी की श्रृंखला] का उपयोग करता है (http: // en।त्रुटियों को संभालने के दौरान wikipedia.org/wiki/Chain-of-responsibility_pattern) पैटर्न। इससे आपको किसी भी तरह से त्रुटि को संभालने की सुविधा मिलती है। आप Guzzle त्रुटि लॉग जैसे कुछ कर सकते हैं, और फिर लैरवेल के अन्य त्रुटि हैंडलर को जवाब देना है कि कैसे प्रतिक्रिया दें। कुछ और स्पष्टीकरण के लिए [यह ब्लॉग पोस्ट] देखें (http://fideloper.com/laravel4-error-handling "लार्वाल त्रुटि हैंडलिंग")। – fideloper

+2

यह "इसका बाईपास कैसे करें" का उत्तर नहीं है? और कुछ तरीकों को फेंकने के बाद मैंने अपनी विधि में अपवाद को संभाला। मुझे अपनी कक्षा के बाहर कोड क्यों लिखना चाहिए ताकि मेरी कक्षा को यह पता चल सके कि कैसे संभालना है? कुछ सेंट्री के कार्टलिस्ट उदाहरणों पर एक नज़र डालें: http://docs.cartalyst.com/sentry-2/authentication/login। वे सामान हैं जो कभी लैरवेल पर काम नहीं करेंगे। –

+0

@AntonioCarlosRibeiro, प्रश्न मैंने सोचा कि कैसे अपनी खुद की त्रुटि प्रबंधन को पंजीकृत करना है, क्या मैं गलत हूं? –

2
अपने कोड

catch (Guzzle\Http\Exception\BadResponseException $e) 
{ 
    return false; 
} 
return true 

उपयोग इस समाधान

catch (\Exception $e) 
{ 
    return false; 
} 
return true 

guzzle द्वारा फेंका सभी संभव अपवाद को पकड़ने के लिए करने के बजाय

आप स्पष्ट रूप से एक BadResponseException आप भी के साथ अपने अपवाद की क्लास नाम स्थान पहले जोड़ें कर सकते हैं पकड़ने के लिए चाहते हैं '\'

catch (\Guzzle\Http\Exception\BadResponseException $e) 
{ 
    return false; 
} 
return true 
संबंधित मुद्दे