Поліпшення повідомлень про помилки для помилок компіляції XML


14

Magento досить захисний (як і належить) щодо відображення помилок. Коли ввімкнено режим розробника (як це має бути під час розробки), програма дозволяє зворотній зв’язок з помилками під час виконання, щоб перетворюватися на користувача. Для помилок компіляції XML, хоча цей відгук є досить марним:

Фатальна помилка: Невизначений виняток "Виняток" із повідомленням "Попередження: simplexml_load_string (): Entity: рядок 4: помилка аналізатора: Декларація XML дозволена лише на початку документа в [...] / lib / Varien / Simplexml / Config. php у рядку 510 'у програмі [...] / код / ​​core / Mage / Core / function.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()
            )
        );
    }
}

Це, принаймні, забезпечує вихід таким чином:

Фатальна помилка: Невиконаний виняток 'Mage_Core_Exception' з повідомленням ' Varien_Simplexml_Config :: loadFile: аналіз аналізу помилок [...] / app / code / local / Some / Example / etc / config.xml : Попередження: simplexml_load_string (): Entity: рядок 4 : помилка парсера: XML-декларація дозволена лише на початку документа в [...] / lib / Varien / Simplexml / Config.php у рядку 534 'у [...] / app / Mage.php у рядку 594

Чи є тут якісь переваги / недоліки / альтернативні підходи?


Я відчуваю, що модуль спільноти для вдосконалення деяких із цих поганих повідомлень про основні помилки був би епічним. Інше повідомлення про помилку, яке дійсно погано, це те, що він не може знайти заданий phtml.
kalenjordan

Відповіді:


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 {} \;(сміливо редагуйте відповідь)
Алекс

Для config.xml: Я фанатfind . -type f -name 'config.xml' -exec xmllint --noout {} \;
тести

@Alex Я отримую ту ж помилку, чи виправили це?
Метелик

Ви спробували рядок, який я розмістив?
Олексій
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.