Magento在错误显示方面具有应有的保护作用。启用开发人员模式时(在开发过程中应该如此),该应用程序允许运行时错误反馈冒泡给用户。对于XML编译错误,尽管此反馈相当无用:
致命错误:消息“警告”的未捕获异常“异常”:实体:第4行:解析器错误:仅在[/] / lib / Varien / Simplexml / Config中的文档开头才允许XML声明。 daccess-ods.un.org daccess-ods.un.org在第245行的app / code / core / Mage / Core / functions.php中的510'行上的php
这是由于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);
}
有几种可能的解决方案,包括using 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()
)
);
}
}
这至少提供如下输出:
致命错误:消息为“ Varien_Simplexml_Config :: loadFile:解析错误[/]/app/code/local/Some/Example/etc/config.xml的未捕获异常'Mage_Core_Exception' :警告:simplexml_load_string():实体:第4行:解析器错误:仅在文档开头的[...] / lib / Varien / Simplexml / Config.php的第534行的[...] / app / Mage.php的XML声明
这里是否有一些优点/缺点/替代方法要考虑?