Magento é bastante protetor (como deveria ser) em relação à exibição de erros. Quando o modo de desenvolvedor está ativado (como deveria estar durante o desenvolvimento), o aplicativo permite que o feedback de erro em tempo de execução seja exibido pelo usuário. Para erros de compilação XML, embora esse feedback seja bastante inútil:
Erro fatal: exceção não capturada 'Exception' com a mensagem 'Aviso: simplexml_load_string (): Entidade: linha 4: erro do analisador: declaração XML permitida apenas no início do documento em [...] / lib / Varien / Simplexml / Config. php na linha 510 'em app / code / core / Mage / Core / functions.php na linha 245
Isso resulta da Varien_Simplexml_Config::loadFile()
apresentação de ::loadString()
uma sequência que não pode ser analisada:
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);
}
Existem várias soluções em potencial, incluindo o uso libxml_use_internal_errors
, mas o método de chamada não comunica o $filePath
parâmetro, portanto o contexto seria perdido. Uma possibilidade seria lançar uma exceção mais explícita:
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()
)
);
}
}
Isso fornece pelo menos uma saída como a seguinte:
Erro fatal: exceção não capturada 'Mage_Core_Exception' com a mensagem ' Varien_Simplexml_Config :: loadFile: erro ao analisar [...] / app / code / local / Some / Example / etc / config.xml : Aviso: simplexml_load_string (): Entidade: linha 4 : erro do analisador: declaração XML permitida apenas no início do documento em [...] / lib / Varien / Simplexml / Config.php na linha 534 'em [...] / app / Mage.php na linha 594
Existem algumas vantagens / desvantagens / abordagens alternativas a serem consideradas aqui?