Saya pikir ini adalah pertanyaan yang sangat bagus, yang terhubung dengan bagaimana Magento memuat kelas.
Tidak ada cara yang baik untuk memperbaikinya tanpa mengubah file Magento.
Jadi masalah utamanya adalah di 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
- metode ini hanya dapat memuat kelas yang mengikuti "konvensi penamaan Pear" - Mage_Core_Model_Config
.
Tetapi jika ruang nama yang digunakan $class
akan berisi Mage\\Core\\Model\\Config
.
Jadi kita bisa menambahkan satu lagi memeriksa dan memperbaiki masalah namespace
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;
}
Sekarang Anda dapat menggunakan perpustakaan yang menggunakan ruang nama.
Selain itu di sini Anda akan menemukan daftar perubahan kode untuk menggunakan ruang nama di Magento.