@ দিমিত্রিরেকুন যেমন বলেছিলেন, এখানে একটি ভাল আলোচনা রয়েছে । এই সমস্ত বিবেচনার মূল অংশটি হ'ল আপনার কোন ধরণের ত্রুটি রয়েছে?
দুটি ধরণের ত্রুটি রয়েছে:
- পুনর্লভ্য
- অপুনরুদ্ধারযোগ্য।
পার্থক্যটি আমি নীচে যোগ করতে চাই:
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.
}