Myślę, że to bardzo dobre pytanie związane z tym, jak Magento ładuje klasy.
Nie ma dobrego sposobu, aby to naprawić bez zmiany plików Magento.
Więc głównym problemem jest 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
- ta metoda może ładować tylko klasy zgodne z „Konwencjami nazewnictwa gruszek” - Mage_Core_Model_Config
.
Ale jeśli zostaną użyte przestrzenie nazw, $class
będą zawierać Mage\\Core\\Model\\Config
.
Możemy więc dodać jeszcze jedno sprawdzenie i naprawić problem przestrzeni nazw
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;
}
Teraz możesz korzystać z bibliotek korzystających z przestrzeni nazw.
Ponadto tutaj znajdziesz listę zmian kodu, aby korzystać z przestrzeni nazw w Magento.