Magento ist ziemlich schützend (wie es sein sollte) hinsichtlich der Anzeige von Fehlern. Wenn der Entwicklermodus aktiviert ist (wie es während der Entwicklung sein sollte), lässt die Anwendung eine Laufzeitfehlerrückmeldung an den Benutzer zu. Für XML-Kompilierungsfehler ist dieses Feedback jedoch ziemlich nutzlos:
Schwerwiegender Fehler: Ungefangene Ausnahme 'Ausnahme' mit der Meldung 'Warnung: simplexml_load_string (): Entität: Zeile 4: Parser-Fehler: XML-Deklaration nur am Anfang des Dokuments in [...] / lib / Varien / Simplexml / Config zulässig. php on line 510 'in [...] app / code / core / Mage / Core / functions.php on line 245
Dies ergibt sich aus der Varien_Simplexml_Config::loadFile()
Darstellung ::loadString()
mit einer Zeichenfolge, die nicht analysiert werden kann:
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);
}
Es gibt mehrere mögliche Lösungen, einschließlich der Verwendung libxml_use_internal_errors
, aber die aufrufende Methode kommuniziert den $filePath
Parameter nicht, sodass der Kontext verloren gehen würde. Eine Möglichkeit wäre, eine explizitere Ausnahme auszulösen:
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()
)
);
}
}
Dies liefert zumindest eine Ausgabe wie die folgende:
Schwerwiegender Fehler: Ungefangene Ausnahme 'Mage_Core_Exception' mit der Meldung ' Varien_Simplexml_Config :: loadFile: Fehler beim Parsen von [...] / app / code / local / Some / Example / etc / config.xml : Warnung: simplexml_load_string (): Entität: Zeile 4 : Parser-Fehler: XML-Deklaration nur am Anfang des Dokuments in [...] / lib / Varien / Simplexml / Config.php in Zeile 534 'in [...] / app / Mage.php in Zeile 594 zulässig
Gibt es hier einige Vor- / Nachteile / alternative Ansätze zu berücksichtigen?