2011-08-16 17 views
5

मैं का उपयोग कर विशेष चर $message यहाँ http://www.symfony-project.org/cookbook/1_2/en/error_templates वर्णित लेकिन यह इस चर, सिम्फोनी 1.4 में निर्धारित नहीं है कम से कम इसे अपवाद के लिए इस तरह से throw new sfException('some message')symfony 1.4: error.html.php पर अपवाद संदेश कैसे पास करें?

क्या आप जानते हैं इस पारित करने के लिए अन्य तरीके से पारित कर दिया संदेश शामिल नहीं है लगता है की कोशिश की error.html.php को संदेश?

उत्तर

7

आपको कुछ कस्टम त्रुटि प्रबंधन करने की आवश्यकता होगी। हमने खुद को कस्टम सिम्फनी एक्शन के लिए आगे बढ़ाया। हालांकि सावधान रहें, यह क्रिया स्वयं भी अपवाद को ट्रिगर कर सकती है, आपको इसे ध्यान में रखना होगा।

निम्नलिखित एक अच्छी शुरुआत हो सकती है। सबसे पहले घटना के लिए एक श्रोता जोड़ने के लिए, एक अच्छी जगह 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

+1 आपको बहुत बहुत धन्यवाद! हमारी प्रणाली थीमिंग का समर्थन करती है और इसके बिना हम त्रुटि 500 ​​पृष्ठों को भी समर्थन देने में सक्षम नहीं होते। बहुत सराहना की। – flu

+0

आपके उत्तर के लिए धन्यवाद! क्या आपके कस्टम फ़ंक्शन को 'application.throw_exception' * से कनेक्ट करना * उस घटना पर * सिम्फनी का डिफ़ॉल्ट व्यवहार ओवरराइट करें? यदि हां, तो क्या मैं कस्टम फ़ंक्शन के अंदर 'self :: parent()' को कॉल करने से रोक सकता हूं? मैं सिर्फ * कुछ कार्यक्षमता * जोड़ना चाहता हूं .. – Tapper

+1

@Tapper आपको वापसी मूल्य को संशोधित करके इसे पूरा करने में सक्षम होना चाहिए, इसके बजाय $ event-> setReturnValue (false) आज़माएं – Gerry

0

मुझे लगता है कि ऐसा करने के लिए एक और चाल मिल गया है - sfContext लिए इस्तेमाल किया जा करने के लिए है error.html.php लेकिन कस्टम कार्य करने के लिए अपवाद संदेश पारित करने के लिए इस्तेमाल किया जा सकता अपवाद फेंक दो। उदाहरण के लिए:

class myToolkit { 
    public static function throwException($message) 
    { 
     sfContext::getInstance()->set('error_msg', $message); 
     throw new sfException($message); 
    } 

throw new sfException('some message') का उपयोग कर के insted से आप myToolkit::throwException('some message')

का उपयोग करना चाहिए error.html.php उपयोग <?php echo sfContext::getInstance()->get('error_msg') ?>

1

में संदेश प्रदर्शित करने के लिए मुझे लगता है कि मैं एक बहुत सरल जवाब मिल गया। सिम्फनी 1.4 $message पर वास्तव में परिभाषित नहीं किया गया है, लेकिन $exception है (इसमें अपवाद ऑब्जेक्ट है)।

तो बस $exception->message गूंजें।

और voilà!

संबंधित मुद्दे