XML संकलन त्रुटियों के लिए त्रुटि संदेश में सुधार


14

Magento त्रुटियों के प्रदर्शन के बारे में काफी सुरक्षात्मक है (जैसा कि यह होना चाहिए)। जब डेवलपर मोड सक्षम किया जाता है (जैसा कि यह विकास के दौरान होना चाहिए), तो एप्लिकेशन उपयोगकर्ता को रन-अप करने के लिए रनटाइम त्रुटि प्रतिक्रिया की अनुमति देता है। XML संकलन त्रुटियों के लिए हालांकि यह प्रतिक्रिया काफी बेकार है:

घातक त्रुटि: संदेश के साथ अपवाद अपवाद 'अपवाद' चेतावनी: simplexml_load_string (): इकाई: पंक्ति 4: पार्सर त्रुटि: XML की घोषणा केवल दस्तावेज़ में [...] / lib / Venen / Simplexml / config में शुरू की जाती है। php ऑन लाइन 510 '[...] ऐप / कोड / कोर / मैज / कोर / functions.php ऑन लाइन 245

यह एक स्ट्रिंग के साथ Varien_Simplexml_Config::loadFile()प्रस्तुत करने का परिणाम है ::loadString()जिसे पार्स नहीं किया जा सकता है:

public function loadFile($filePath)
{
    if (!is_readable($filePath)) {
        //throw new Exception('Can not read xml file '.$filePath);
        return false;
    }

    $fileData = file_get_contents($filePath);
    $fileData = $this->processFileData($fileData);
    return $this->loadString($fileData, $this->_elementClass);
}

उपयोग करने सहित कई संभावित समाधान हैं, libxml_use_internal_errorsलेकिन कॉलिंग विधि $filePathपरम को संचार नहीं करती है , इसलिए संदर्भ खो जाएगा। एक संभावना अधिक स्पष्ट अपवाद फेंकने की होगी:

public function loadFile($filePath)
{
    if (!is_readable($filePath)) {
        //throw new Exception('Can not read xml file '.$filePath);
        return false;
    }

    $fileData = file_get_contents($filePath);
    $fileData = $this->processFileData($fileData);
    try{
        return $this->loadString($fileData, $this->_elementClass);
    }
    catch (Exception $e){
        Mage::throwException (
            sprintf(
                "%s: error parsing %s:\r\n%s",
                __METHOD__,
                $filePath,
                $e->getMessage()
            )
        );
    }
}

यह कम से कम निम्नलिखित की तरह आउटपुट प्रदान करता है:

घातक त्रुटि: संदेश ' Varien_Simplexml_Config :: loadFile: त्रुटि पार्सिंग [...] / एप्लिकेशन / कोड / स्थानीय / कुछ / उदाहरण / config.xml : संदेश के साथ अनियोजित अपवाद' Mage_Core_Exception ' : चेतावनी: simplexml_load_string (): इकाई 4। : पार्सर त्रुटि: XML घोषणा केवल दस्तावेज़ में [...] / lib / Varien / Simplexml / Config.php ऑन लाइन 534 'में [...] / app / Mage.php लाइन 594 पर अनुमति दी

क्या यहां पर विचार करने के लिए कुछ फायदे / नुकसान / वैकल्पिक दृष्टिकोण हैं?


मुझे लगता है कि इन खराब कोर त्रुटि संदेशों में से कुछ को बेहतर बनाने के लिए एक सामुदायिक मॉड्यूल की तरह महाकाव्य होगा। अन्य त्रुटि संदेश जो वास्तव में बुरा है जब वह किसी दिए गए phtml को नहीं ढूंढ सकता है।
कालेंजर्डन

जवाबों:


14

मैं हमेशा ले जाने वाला दृष्टिकोण एक साधारण लाइनर है:

find . -type f -name '*.xml' -exec xmllint --noout {} \;

libxml2- बर्तनों की आवश्यकता हालांकि ...


1
और wsi फ़ाइलों में झूठी सकारात्मकता दिखाता है:namespace error : xmlns:typens: 'urn:{{var wsdl.name}}' is not a valid URI
एलेक्स

वर्कअराउंड: find . -type f -not -name 'wsi.xml' -not -name 'wsdl.xml' -not -name 'wsdl2.xml' -name '*.xml' -exec xmllint --noout {} \;(जवाब संपादित करने के लिए स्वतंत्र महसूस करें)
एलेक्स

find . -type f -name 'config.xml' -exec xmllint --noout {} \;
Config.xml के

@ मुझे एक ही त्रुटि मिल रही है, क्या आपके पास इसके लिए कोई समस्या है?
तितली

क्या आपने पोस्ट की गई लाइन की कोशिश की?
एलेक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.