Magento khá bảo vệ (vì nó nên như vậy) liên quan đến việc hiển thị lỗi. Khi chế độ nhà phát triển được bật (như trong quá trình phát triển), ứng dụng cho phép phản hồi lỗi thời gian chạy để tạo bong bóng cho người dùng. Đối với các lỗi biên dịch XML mặc dù phản hồi này khá vô dụng:
Lỗi nghiêm trọng: Uncaught ngoại lệ 'Ngoại lệ' với thông báo 'Cảnh báo: simplexml_load_opes (): Thực thể: dòng 4: lỗi trình phân tích cú pháp: Khai báo XML chỉ được phép khi bắt đầu tài liệu trong [...] / lib / Varien / Simplexml / Config. php trên dòng 510 'trong [...] app / code / core / Mage / Core / tests.php trên dòng 245
Kết quả này từ việc Varien_Simplexml_Config::loadFile()
trình bày ::loadString()
một chuỗi không thể được phân tích cú pháp:
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);
}
Có một số giải pháp tiềm năng, bao gồm sử dụng libxml_use_internal_errors
, nhưng phương thức gọi không giao tiếp với $filePath
param, vì vậy bối cảnh sẽ bị mất. Một khả năng sẽ là ném một ngoại lệ rõ ràng hơn:
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()
)
);
}
}
Điều này ít nhất cung cấp đầu ra như sau:
Lỗi nghiêm trọng: Đã hủy ngoại lệ 'Mage_Core_Exception' với thông báo ' Varien_Simplexml_Config :: loadFile: phân tích lỗi [...] / app / code / local / some / example / etc / config.xml : Cảnh báo: simplexml_load_opes (): Entity: 4 : lỗi trình phân tích cú pháp: Khai báo XML chỉ được phép khi bắt đầu tài liệu trong [...] / lib / Varien / Simplexml / Config.php trên dòng 534 'trong [...] / app / Mage.php trên dòng 594
Có một số ưu điểm / nhược điểm / phương pháp thay thế để xem xét ở đây?