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
Чи є тут якісь переваги / недоліки / альтернативні підходи?