Tôi nghĩ rằng đây là một câu hỏi rất hay, được kết nối với cách Magento tải các lớp.
Không có cách nào tốt để khắc phục điều đó mà không thay đổi các tệp Magento.
Vì vậy, vấn đề chính là ở 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
- phương thức này chỉ có thể tải các lớp tuân theo "quy ước đặt tên Pear" - Mage_Core_Model_Config
.
Nhưng nếu không gian tên được sử dụng $class
sẽ chứaMage\\Core\\Model\\Config
.
Vì vậy, chúng ta có thể thêm một kiểm tra và khắc phục vấn đề không gian tên
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;
}
Bây giờ bạn có thể sử dụng các thư viện sử dụng không gian tên.
Ngoài ra, ở đây bạn sẽ tìm thấy danh sách thay đổi mã để sử dụng không gian tên trong Magento.