@DmitryRekun ने कहा, एक अच्छी चर्चा यहाँ है । इस सब पर विचार करने के लिए महत्वपूर्ण टुकड़ा आपके पास किस प्रकार की त्रुटि है?
त्रुटियों के दो प्रकार हैं:
- बचानेवाला
- अप्राप्य।
अंतर मैं इस प्रकार है:
Can I still show the page that was requested, even though this error occurred?
- हाँ? - पुनर्प्राप्त करने योग्य
- नहीं? - अपरिवर्तनीय
अब जब हम जानते हैं कि हम किसके साथ काम कर रहे हैं। आपको क्या करना चाहिये?
यदि त्रुटि अस्वीकार्य है, तो आप अनुरोधित पृष्ठ पर जारी रखने के बजाय उन्हें त्रुटि पृष्ठ पर पुनर्निर्देशित करना चाहते हैं । यह निम्नलिखित के रूप में सरल है:
throw new Exception(JText::_('COM_MYCOMP_ERROR_MESSAGE_NOT_FOUND'), 404);
Exception
एक ऐसा वर्ग है जो दो मापदंडों, एक संदेश और एक कोड लेता है। यदि वे आपके परिदृश्य में फिट होते हैं, तो HTTP प्रतिसाद कोड का उपयोग करने का प्रयास करने की अनुशंसा की जाती है।
यदि त्रुटि पुनर्प्राप्त करने योग्य है, तो आप संभवत: एक संदेश को अंतिम उपयोगकर्ता को वापस प्रदर्शित करना चाहते हैं, जबकि अभी भी वह पृष्ठ दिखा रहा है जो उन्होंने अनुरोध किया था। आम तौर पर इसका मतलब है कि आपको आवेदन के लिए एक संदेश 'एनकेयू' करना चाहिए:
JFactory::getApplication()->enqueueMessage($error, 'error');
enqueueMessage
दो पैरामीटर, त्रुटि संदेश और एक संदेश प्रकार लेता है। अधिक जानकारी यहाँ (नीचे)।
एक तीसरी स्थिति भी है जो कम से कम मेरे लिए अक्सर होती है। जूमला विभिन्न त्रुटियों (जैसे डेटाबेस क्वेरी त्रुटि) के लिए अपवाद फेंक देगा। इसका मतलब है कि जूमला को लगता है कि यह त्रुटि अप्राप्य है। हालाँकि, आप वैसे भी जारी रखना चाह सकते हैं। (उदाहरण के लिए, यदि मैं अपने एक्सटेंशन के अपडेट पर एक तालिका बदल रहा हूं, तो मैं केवल ALTER
क्वेरी चला सकता हूं , जो कि अपवाद को फेंक देगा यदि तालिका पहले बदल दी गई है।)
उस स्थिति में, आप उस कोड को लपेटना चाहते हैं जो एक प्रयास में एक अपवाद फेंक सकता है ... पकड़ अनुभाग:
try {
// exception generating code
throw new Exception('Normally you would have other code that calls a class that throws the exception', 500);
} catch (Exception $e) {
$msg = $e->getMessage(); // Returns "Normally you would have other code...
$code = $e->getCode(); // Returns '500';
JFactory::getApplication()->enqueueMessage($msg, 'error'); // commonly to still display that error
}
ध्यान दें कि आप जो कर रहे हैं, वह अपरिवर्तनीय त्रुटि को "पकड़" रहा है और सिस्टम को पुनर्प्राप्त करने के लिए मजबूर कर रहा है और अनुरोधित पृष्ठ दिखा रहा है।
यह सब जोड़ें और आपका मामला एक अपरिवर्तनीय त्रुटि होनी चाहिए। (मुझे यह पता है क्योंकि आपके पास बाद में 'गलत रिटर्न' है, इसलिए आप संभवतः जारी रखने की योजना नहीं बनाते हैं और फ़ंक्शन को छोड़ रहे हैं।)
इस प्रकार मैं इसे इस प्रकार फिर से लिखूंगा:
// Check for errors.
if (count($errors = $this->get('Errors')))
{
throw new Exception(implode("\n", $errors), 500);
return false; // you can remove this too, technically since the exception will take you out of this function.
}