2013-01-13 19 views
7

पकड़ने में सक्षम नहीं है मैंने इस समस्या को अलग करने की कोशिश की है (इसे मेरे ऐप के बाहर उत्पादित करने के लिए), लेकिन मैं नहीं कर सकता।लार्वेल 4 अपवाद

try { 
    $has_cache = Cache::has($cache_key); 
} 
catch (DecryptException $e) { 
    echo "No biggie"; 
    exit; 
} 

मैं भी एक catch (Exception $e) साथ की कोशिश की, एक ही बात होता है।

इस कोड का उपयोग करके, मुझे दूसरी पंक्ति में एक डिक्रिप्ट अपवाद मिलता है। यह कैसे हो सकता है, यह कोशिश ब्लॉक में है?

जैसा मैंने कहा, मैंने एक स्वच्छ परियोजना पर ऐसा करने की कोशिश की, लेकिन वहां अपवाद पकड़ा गया, इसलिए मैं पूछ रहा हूं कि मैंने कुछ गड़बड़ कर सकते हैं।

+0

एक से अधिक डिक्रिप्ट अपवाद कक्षाएं हो सकती हैं, यह केवल एक चीज है जिसे मैं सोच सकता हूं। – dualed

+0

मैंने अपना प्रश्न अपडेट कर लिया है, क्योंकि मैंने "कैच (अपवाद $ ई)" का उपयोग करने की कोशिश की है और यह भी काम नहीं करता है। –

+0

क्या आप वास्तविक त्रुटि संदेश जोड़ सकते हैं? आपके उत्तर के लिए – dualed

उत्तर

24

आपके आवेदन namespaced है, तो, आप वैसे ही

catch(\Exception $e); 
// or preferably 
catch(\RuntimeException $e); 

का उपयोग करने की आवश्यकता होगी, मुझे लगता है कि DecryptException आप को पकड़ने के लिए Illuminate\Encryption में namespaced है कोशिश कर रहे हैं ताकि आप आवश्यकता होगी

catch(\Illuminate\Encryption\DecryptException) 
// or use "use" somewhere before the try/catch 
use \Illuminate\Encryption\DecryptException 

ध्यान रखें कि लैरवेल 4 अभी भी अल्फा या प्री-बीटा (जाहिर है कि वे खुद को निश्चित नहीं हैं), इसलिए यह किसी भी तरह से स्थिर नहीं है और शायद उत्पादन के लिए सबसे अच्छा विकल्प नहीं है।

+0

+1। एक नामस्थान में काम करना वास्तव में मुझे गड़बड़ कर रहा है। क्या "उपयोग /" या कुछ घोषित करने का कोई तरीका है? यह हर वैश्विक वर्ग को बैकस्लैश करने के लिए परेशान है .. – Anthony

+0

ब्रैकेट-सिंटैक्स के साथ आप 'नेमस्पेस {/ * कोड यहां * /} 'परिभाषित कर सकते हैं (बिना' नेमस्पेस 'कीवर्ड के बाद पहचानकर्ता के बिना) वैश्विक कक्षाएं नहीं एक '\' की आवश्यकता है, लेकिन आप इसमें नामित कक्षा को परिभाषित नहीं कर सकते हैं ('वर्ग \ \ {{' 'मान्य नहीं है) और आप उन्हें घोंसला नहीं दे सकते हैं, इसलिए शायद यह आपको बहुत अच्छा नहीं करेगा। कार्यों और स्थिरांक के लिए कम से कम एक फॉलबैक बनाया गया है जो उन्हें मौजूदा एनएस में नहीं मिला तो वैश्विक एनएस से लोड करता है। बेशक आप हमेशा 'फू, बार, बाफ का उपयोग कर सकते हैं;' (जहां 'फू', आदि वैश्विक अंतरिक्ष में कक्षाएं हैं) – dualed

+0

ठीक है, जानना अच्छा है। सुझावों के लिए धन्यवाद! – Anthony

2

laravel 5.1 के लिए आप लिखना चाहिए (आम तौर पर अन्य उपयोग बयानों के साथ फ़ाइल के शुरू में):

use Illuminate\Contracts\Encryption\DecryptException; 

पकड़ बयान से पहले:

try { 
    $data = \Crypt::decrypt($key); 
} catch (DecryptException $e) { 
    echo 'caught exception'; 
    exit(); 
} 

रेफरी: https://laravel.com/docs/5.1/encryption - के तहत "डिक्रिप्ट एक मान "

दूसरों के लिए सहायक हो सकता है।