Magento est assez protecteur (comme il se doit) concernant l'affichage des erreurs. Lorsque le mode développeur est activé (comme il devrait l'être pendant le développement), l'application permet à l'utilisateur de faire remonter les informations sur les erreurs d'exécution. Pour les erreurs de compilation XML, ces commentaires sont assez inutiles:
Erreur fatale: exception non interceptée 'Exception' avec le message 'Avertissement: simplexml_load_string (): Entité: ligne 4: erreur de l'analyseur: déclaration XML autorisée uniquement au début du document dans [...] / lib / Varien / Simplexml / Config. php en ligne 510 'dans app / code / core / Mage / Core / functions.php en ligne 245
Cela résulte de la Varien_Simplexml_Config::loadFile()
présentation ::loadString()
d'une chaîne qui ne peut pas être analysée:
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);
}
Il existe plusieurs solutions potentielles, y compris l'utilisation libxml_use_internal_errors
, mais la méthode d'appel ne communique pas le $filePath
paramètre, donc le contexte serait perdu. Une possibilité serait de lever une exception plus explicite:
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()
)
);
}
}
Cela fournit au moins une sortie comme celle-ci:
Erreur fatale: exception non interceptée 'Mage_Core_Exception' avec le message ' Varien_Simplexml_Config :: loadFile: erreur d'analyse [...] / app / code / local / Some / Example / etc / config.xml : avertissement: simplexml_load_string (): entité: ligne 4 : erreur de l'analyseur: déclaration XML autorisée uniquement au début du document dans [...] / lib / Varien / Simplexml / Config.php sur la ligne 534 'dans [...] / app / Mage.php sur la ligne 594
Y a-t-il des avantages / inconvénients / approches alternatives à considérer ici?
la source
Réponses:
L'approche que je prends toujours est une simple ligne:
libxml2-utils requis cependant ...
la source
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 {} \;
(n'hésitez pas à modifier la réponse)find . -type f -name 'config.xml' -exec xmllint --noout {} \;