XML derleme hataları için hata mesajlarını iyileştirme


14

Magento, hataların görüntülenmesi konusunda oldukça koruyucu (olması gerektiği gibi). Geliştirici modu etkinleştirildiğinde (geliştirme sırasında olması gerektiği gibi), uygulama çalışma zamanı hatası geri bildiriminin kullanıcıya ulaşmasını sağlar. XML derleme hataları için bu geri bildirim oldukça işe yaramaz olsa da:

Önemli hata: 'İleti ile yakalanmamış istisna' İstisna 'Uyarı: simplexml_load_string (): Varlık: satır 4: ayrıştırıcı hatası: XML bildirimine yalnızca [...] / lib / Varien / Simplexml / Config içindeki belgenin başlangıcında izin verilir. php on line 510 'in [...] app / code / core / Mage / Core / function.php on line 245

Bu, ayrıştırılamayan bir dize ile Varien_Simplexml_Config::loadFile()sunulmasından kaynaklanır ::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);
}

Kullanmak da dahil olmak üzere çeşitli potansiyel çözümler vardır libxml_use_internal_errors, ancak çağıran yöntem $filePathparametreyi iletmez , bu nedenle bağlam kaybolur. Bir olasılık daha açık bir istisna atmak olabilir:

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

Bu en azından aşağıdaki gibi çıktı sağlar:

Önemli hata: ' Varien_Simplexml_Config :: loadFile: mesaj ayrıştırma hatası olan' Mage_Core_Exception 'yakalanmamış istisnası [...] / app / code / local / Bazı / Örnek / etc / config.xml : Uyarı: simplexml_load_string (): Varlık: satır 4 : ayrıştırıcı hatası: XML bildirimine yalnızca [...] / app / 594 satırındaki [...] / app / Mage.php satırındaki [...] / lib / Varien / Simplexml / Config.php içinde belgenin başlangıcında izin verilir

Burada dikkate alınması gereken bazı avantajlar / dezavantajlar / alternatif yaklaşımlar var mı?


Bu kötü çekirdek hata mesajlarının bazılarını iyileştirmek için bir topluluk modülü gibi hissediyorum. Gerçekten kötü olan diğer hata mesajı, belirli bir phtml bulamadığı zamandır.
kalenjordan

Yanıtlar:


14

Her zaman benim aldığım yaklaşım basit bir astardır:

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

libxml2-utils gerekli olsa ...


1
ve wsi dosyalarında yanlış pozitif gösterir:namespace error : xmlns:typens: 'urn:{{var wsdl.name}}' is not a valid URI
Alex

Çözüm: find . -type f -not -name 'wsi.xml' -not -name 'wsdl.xml' -not -name 'wsdl2.xml' -name '*.xml' -exec xmllint --noout {} \;(cevabı düzenlemekte çekinmeyin)
Alex

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

@Alex Aynı hatayı alıyorum, bunun için düzeltmeniz var mı?
Kelebek

Gönderdiğim satırı denedin mi?
Alex
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.