Magentoは、エラーの表示に関しては(あるべきところに)かなり保護的です。開発者モードが有効になっている場合(開発中にそうであるように)、アプリケーションはランタイムエラーフィードバックをユーザーにバブルアップさせます。XMLコンパイルエラーの場合、このフィードバックはほとんど役に立ちません。
致命的エラー:メッセージ「警告:simplexml_load_string():エンティティ:行4:パーサーエラー:[...] / lib / Varien / Simplexml / Configのドキュメントの先頭でのみ許可されるXML宣言」でキャッチされない例外「例外」。 [...] app / code / core / Mage / Core / functions.phpの245行目にある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);
}
使用を含む、いくつかの潜在的なソリューションがあります libxml_use_internal_errors
が、呼び出し元のメソッドは$filePath
パラメーターを通信しないため、コンテキストが失われます。1つの可能性は、より明示的な例外をスローすることです。
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 :パーサーエラー:XML宣言は、[...] / app / Mage.phpの594行目の[...] / lib / Varien / Simplexml / Config.phpの534行目のドキュメントの先頭でのみ許可されています
ここで考慮すべき利点/欠点/代替アプローチはありますか?