Creo que esta es una muy buena pregunta, que está relacionada con la forma en que Magento carga las clases.
No hay una buena manera de solucionarlo sin cambiar los archivos de Magento.
Entonces, el problema principal está en 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
- este método solo puede cargar clases que siguen las "convenciones de nomenclatura de Pear" - Mage_Core_Model_Config
.
Pero si se utilizan espacios de nombres $class
contendrá Mage\\Core\\Model\\Config
.
Entonces podemos agregar una comprobación más y corregir el problema del espacio de nombres
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;
}
Ahora puede usar bibliotecas que usan espacios de nombres.
Además, aquí encontrará una lista de cambios de código para usar espacios de nombres en Magento.