Magento jest dość ochronny (tak jak powinien) pod względem wyświetlania błędów. Gdy tryb programisty jest włączony (tak jak powinien być podczas programowania), aplikacja pozwala na przesłanie komunikatu zwrotnego dotyczącego błędu środowiska wykonawczego do użytkownika. W przypadku błędów kompilacji XML ta opinia jest jednak bezużyteczna:
Błąd krytyczny: nieprzechwycony wyjątek „Wyjątek” z komunikatem „Ostrzeżenie: simplexml_load_string (): Obiekt: wiersz 4: błąd analizatora składni: deklaracja XML dozwolona tylko na początku dokumentu w [...] / lib / Varien / Simplexml / Config. php na linii 510 'w [...] aplikacji / code / core / Mage / Core / functions.php na linii 245
Wynika to z Varien_Simplexml_Config::loadFile()
prezentacji ::loadString()
ciągu, którego nie można przeanalizować:
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);
}
Istnieje kilka potencjalnych rozwiązań, w tym użycie libxml_use_internal_errors
, ale metoda wywołania nie przekazuje $filePath
parametrów, więc kontekst zostałby utracony. Jedną z możliwości byłoby wprowadzenie bardziej wyraźnego wyjątku:
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()
)
);
}
}
Zapewnia to co najmniej następujące wyniki:
Błąd krytyczny: nieprzechwycony wyjątek „Mage_Core_Exception” z komunikatem „ Varien_Simplexml_Config :: loadFile: parsowanie błędów [...] / app / code / local / Some / Example / etc / config.xml : Ostrzeżenie: simplexml_load_string (): Entity: wiersz 4 : błąd analizatora składni: deklaracja XML jest dozwolona tylko na początku dokumentu w [...] / lib / Varien / Simplexml / Config.php w linii 534 'w [...] / app / Mage.php w linii 594
Czy są tu jakieś zalety / wady / alternatywne podejścia?
źródło
Odpowiedzi:
Podejście, które zawsze wybieram, jest proste, jedno-liniowe:
Wymagane libxml2-utils ...
źródło
namespace error : xmlns:typens: 'urn:{{var wsdl.name}}' is not a valid URI
find . -type f -not -name 'wsi.xml' -not -name 'wsdl.xml' -not -name 'wsdl2.xml' -name '*.xml' -exec xmllint --noout {} \;
(edytuj odpowiedź)find . -type f -name 'config.xml' -exec xmllint --noout {} \;