आपको कुछ कस्टम त्रुटि प्रबंधन करने की आवश्यकता होगी। हमने खुद को कस्टम सिम्फनी एक्शन के लिए आगे बढ़ाया। हालांकि सावधान रहें, यह क्रिया स्वयं भी अपवाद को ट्रिगर कर सकती है, आपको इसे ध्यान में रखना होगा।
निम्नलिखित एक अच्छी शुरुआत हो सकती है। सबसे पहले घटना के लिए एक श्रोता जोड़ने के लिए, एक अच्छी जगह ProjectConfiguration.class.php होगा:
$this->dispatcher->connect('application.throw_exception', array('MyClass', 'handleException'));
ईवेंट हैंडलर का उपयोग करना क्या आप अपवाद के साथ क्या करना चाहते हैं के लिए पर्याप्त हो सकता है, उदाहरण के लिए आप बस मेल करना चाहते हैं व्यवस्थापक के लिए एक ढेर निशान। हम फीडबैक फॉर्म को प्रदर्शित और संसाधित करने के लिए एक कस्टम एक्शन को आगे बढ़ाना चाहते थे। हमारी ईवेंट हैंडलर कुछ इस तरह देखा:
class MyClass {
public static function handleException(sfEvent $event) {
$moduleName = sfConfig::get('sf_error_500_module', 'error');
$actionName = sfConfig::get('sf_error_500_action', 'error500');
sfContext::getInstance()->getRequest()->addRequestParameters(array('exception' => $event->getSubject()));
$event->setReturnValue(true);
sfContext::getInstance()->getController()->forward($moduleName, $actionName);
}
}
अब आप settings.yml
all:
.actions:
error_500_module: error
error_500_action: error500
में एक अपवाद पर करने के लिए अग्रेषित करने के लिए कार्रवाई में ही तुम अब क्या कर सकते हैं मॉड्यूल और कार्रवाई कॉन्फ़िगर कर सकते हैं जो कुछ भी आप अपवाद के साथ चाहते हैं, उदाहरण के लिए। व्यवस्थापक से संपर्क करने के लिए फीडबैक फॉर्म प्रदर्शित करें। आप $ अनुरोध> getParameter ('अपवाद') का उपयोग करके अपवाद ही प्राप्त कर सकते हैं
+1 आपको बहुत बहुत धन्यवाद! हमारी प्रणाली थीमिंग का समर्थन करती है और इसके बिना हम त्रुटि 500 पृष्ठों को भी समर्थन देने में सक्षम नहीं होते। बहुत सराहना की। – flu
आपके उत्तर के लिए धन्यवाद! क्या आपके कस्टम फ़ंक्शन को 'application.throw_exception' * से कनेक्ट करना * उस घटना पर * सिम्फनी का डिफ़ॉल्ट व्यवहार ओवरराइट करें? यदि हां, तो क्या मैं कस्टम फ़ंक्शन के अंदर 'self :: parent()' को कॉल करने से रोक सकता हूं? मैं सिर्फ * कुछ कार्यक्षमता * जोड़ना चाहता हूं .. – Tapper
@Tapper आपको वापसी मूल्य को संशोधित करके इसे पूरा करने में सक्षम होना चाहिए, इसके बजाय $ event-> setReturnValue (false) आज़माएं – Gerry