Je pense que c'est une très bonne question, qui est liée à la façon dont Magento charge les classes.
Il n'y a pas de bon moyen de résoudre ce problème sans modifier les fichiers Magento.
Donc, le principal problème est dans lib / Varien / Autoload.php
public function autoload($class)
{
if ($this->_collectClasses) {
$this->_arrLoadedClasses[self::$_scope][] = $class;
}
if ($this->_isIncludePathDefined) {
$classFile = COMPILER_INCLUDE_PATH . DIRECTORY_SEPARATOR . $class;
} else {
$classFile = str_replace(' ', DIRECTORY_SEPARATOR, ucwords(str_replace('_', ' ', $class)));
}
$classFile.= '.php';
return include $classFile;
}
Varien_Autoload::autoload
- cette méthode ne peut charger que les classes qui respectent les "conventions de dénomination de Pear" - Mage_Core_Model_Config
.
Mais si des espaces de noms sont utilisés, $class
ils contiendront Mage\\Core\\Model\\Config
.
Nous pouvons donc ajouter une autre vérification et résoudre le problème d'espace de noms
public function autoload($class)
{
if ($this->_collectClasses) {
$this->_arrLoadedClasses[self::$_scope][] = $class;
}
if ($this->_isIncludePathDefined) {
$classFile = COMPILER_INCLUDE_PATH . DIRECTORY_SEPARATOR . $class;
} else if (strpos($class, "\\") !== false) {
$classFile = str_replace("\\", DIRECTORY_SEPARATOR, $class);
} else {
$classFile = str_replace(' ', DIRECTORY_SEPARATOR, ucwords(str_replace('_', ' ', $class)));
}
$classFile.= '.php';
return include $classFile;
}
Vous pouvez maintenant utiliser des bibliothèques qui utilisent des espaces de noms.
De plus , vous trouverez ici la liste des modifications de code pour utiliser les espaces de noms dans Magento.