Cải thiện thông báo lỗi cho lỗi biên dịch XML


14

Magento khá bảo vệ (vì nó nên như vậy) liên quan đến việc hiển thị lỗi. Khi chế độ nhà phát triển được bật (như trong quá trình phát triển), ứng dụng cho phép phản hồi lỗi thời gian chạy để tạo bong bóng cho người dùng. Đối với các lỗi biên dịch XML mặc dù phản hồi này khá vô dụng:

Lỗi nghiêm trọng: Uncaught ngoại lệ 'Ngoại lệ' với thông báo 'Cảnh báo: simplexml_load_opes (): Thực thể: dòng 4: lỗi trình phân tích cú pháp: Khai báo XML chỉ được phép khi bắt đầu tài liệu trong [...] / lib / Varien / Simplexml / Config. php trên dòng 510 'trong [...] app / code / core / Mage / Core / tests.php trên dòng 245

Kết quả này từ việc Varien_Simplexml_Config::loadFile()trình bày ::loadString()một chuỗi không thể được phân tích cú pháp:

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);
}

Có một số giải pháp tiềm năng, bao gồm sử dụng libxml_use_internal_errors, nhưng phương thức gọi không giao tiếp với $filePathparam, vì vậy bối cảnh sẽ bị mất. Một khả năng sẽ là ném một ngoại lệ rõ ràng hơn:

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()
            )
        );
    }
}

Điều này ít nhất cung cấp đầu ra như sau:

Lỗi nghiêm trọng: Đã hủy ngoại lệ 'Mage_Core_Exception' với thông báo ' Varien_Simplexml_Config :: loadFile: phân tích lỗi [...] / app / code / local / some / example / etc / config.xml : Cảnh báo: simplexml_load_opes (): Entity: 4 : lỗi trình phân tích cú pháp: Khai báo XML chỉ được phép khi bắt đầu tài liệu trong [...] / lib / Varien / Simplexml / Config.php trên dòng 534 'trong [...] / app / Mage.php trên dòng 594

Có một số ưu điểm / nhược điểm / phương pháp thay thế để xem xét ở đây?


Tôi cảm thấy như một mô-đun cộng đồng để cải thiện một số thông báo lỗi cốt lõi xấu này sẽ là tuyệt vời. Thông báo lỗi khác thực sự xấu là khi nó không thể tìm thấy một phtml cụ thể.
kalenjordan

Câu trả lời:


14

Cách tiếp cận tôi luôn thực hiện là một cách đơn giản:

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

libxml2-utils cần thiết mặc dù ...


1
và hiển thị dương tính giả trong các tệp wsi:namespace error : xmlns:typens: 'urn:{{var wsdl.name}}' is not a valid URI
Alex

Giải pháp thay thế: find . -type f -not -name 'wsi.xml' -not -name 'wsdl.xml' -not -name 'wsdl2.xml' -name '*.xml' -exec xmllint --noout {} \;(vui lòng chỉnh sửa câu trả lời)
Alex

Đối với config.xml: Tôi là người hâm mộ củafind . -type f -name 'config.xml' -exec xmllint --noout {} \;
benmark

@Alex Tôi đang gặp lỗi tương tự, bạn có sửa lỗi đó không?
Bướm

Bạn đã thử dòng tôi đã đăng?
Alex
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.