Magento довольно защищен (как и должно быть) в отношении отображения ошибок. Когда включен режим разработчика (как и должно быть во время разработки), приложение позволяет пользователю получать сообщения об ошибках во время выполнения. Для ошибок компиляции XML эта обратная связь довольно бесполезна:
Неустранимая ошибка: необработанное исключение «Исключение» с сообщением «Предупреждение: simplexml_load_string (): Сущность: строка 4: ошибка синтаксического анализатора: объявление XML допускается только в начале документа в [...] / lib / Varien / Simplexml / Config. php в строке 510 'в [...] приложении / коде / core / Mage / Core / functions.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 : parser error: объявление XML разрешено только в начале документа в [...] / lib / Varien / Simplexml / Config.php в строке 534 'в [...] / app / Mage.php в строке 594
Есть ли здесь какие-то преимущества / недостатки / альтернативные подходы?