Answers:
我认为这是一个非常好的问题,与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
-此方法只能加载遵循“梨命名约定”的类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设置上使用两个单独的数据库。
为此,您必须创建配置,请按照以下步骤操作。
在 app/etc/modules
<?xml version="1.0"?>
<config>
<modules>
<Deph_Externaldb>
<active>true</active>
<codePool>local</codePool>
</Deph_Externaldb>
</modules>
</config>
在app/code/local
并确保更新下面这里的数据库的详细信息
<?xml version="1.0"?>
<config>
<modules>
<Deph_Externaldb>
<version>0.1.0</version>
</Deph_Externaldb>
</modules>
<global>
<resources>
<externaldb_write>
<connection>
<use>externaldb_database</use>
</connection>
</externaldb_write>
<externaldb_read>
<connection>
<use>externaldb_database</use>
</connection>
</externaldb_read>
<externaldb_setup>
<connection>
<use>core_setup</use>
</connection>
</externaldb_setup>
<externaldb_database>
<connection>
<host><![CDATA[localhost]]></host>
<username><![CDATA[db_username]]></username>
<password><![CDATA[db_password]]></password>
<dbname><![CDATA[db_name]]></dbname>
<model>mysql4</model>
<type>pdo_mysql</type>
<active>1</active>
</connection>
</externaldb_database>
</resources>
</global>
</config>
您的配置已准备就绪,您可以使用以下连接字符串进行调用以访问数据库
<?php
$resource = Mage::getSingleton('core/resource');
$conn = $resource->getConnection('externaldb_read');
$results = $conn->query('SELECT * FROM tblName');
print_r($results)