나는 이것이 Magento가 클래스를로드하는 방법과 관련이있는 매우 좋은 질문이라고 생각합니다.
Magento 파일을 변경하지 않고이를 해결하는 좋은 방법은 없습니다.
따라서 주요 문제는 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
-이 메소드는 "Pear naming conventions"-을 따르는 클래스 만로드 할 수 있습니다 Mage_Core_Model_Config
.
그러나 네임 스페이스를 사용 $class
하면가 포함 Mage\\Core\\Model\\Config
됩니다.
그래서 우리는 하나 이상의 검사를 추가하고 네임 스페이스 문제를 해결할 수 있습니다
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;
}
이제 네임 스페이스를 사용하는 라이브러리를 사용할 수 있습니다.
또한 여기 에 Magento에서 네임 스페이스를 사용하기위한 코드 변경 목록이 있습니다.