Magento没有正确加载config.xml,getResourceModel返回false

时间:2015-05-08 14:35:05

标签: magento magento-1.5 magento-1.6

请!!!我已经坚持了这个问题大约一个月。

我原来的问题是Mage::getResourceModel()返回false。我尝试了一切并且无法成功。

然后我开始追踪与getResourceModel()函数相关的核心类。

我最终使用Config.php _getResourceModelFactoryClassName()函数,该函数从$this->_xml->global->models object读取XML。

我var_dump该XML并发现其他模块具有_resource属性,但我的模块没有。

["weee"]=>
 object(Mage_Core_Model_Config_Element)#143 (2) {
    ["class"]=>
    string(15) "Mage_Weee_Model"
    ["resourceModel"]=>
    string(13) "weee_resource"
  }
  ["weee_resource"]=>
  object(Mage_Core_Model_Config_Element)#144 (3) {
    ["class"]=>
    string(24) "Mage_Weee_Model_Resource"
    ["deprecatedNode"]=>
    string(11) "weee_mysql4"
    ["entities"]=>
    object(Mage_Core_Model_Config_Element)#150 (2) {
      ["tax"]=>
      object(Mage_Core_Model_Config_Element)#175 (1) {
       ["table"]=>
        string(8) "weee_tax"
      }
      ["discount"]=>
      object(Mage_Core_Model_Config_Element)#172 (1) {
        ["table"]=>
       string(13) "weee_discount"
      }
    }
 }

  ["module"]=>
  object(Mage_Core_Model_Config_Element)#146 (2) {
    ["class"]=>
    string(12) "Namespace_Module_Model"
    ["resourceModel"]=>
    string(11) "module_resource"
  }

在上面的代码中,["模块"]是我的自定义模块,并没有像[" weee_resource"]

那样带来它的资源
<global>
    <models>
        <module>
            <class>Namespace_Module_Model</class>
            <resourceModel>module_resource</resourceModel>
        </module>
    </models>
    <module_resource>
        <class>Namespace_Module_Model_Resource</class>
        <deprecatedNode>cb_mysql4</deprecatedNode>
        <entities>
            <payment>
                <table>acs_transaction</table>
            </payment>
        </entities>
    </module_resource>

感谢。

2 个答案:

答案 0 :(得分:0)

config.xml中没有module_resource NODE

    </models>
    <module_resource>

这个宣言是错误的 您的modules_resource需要在模型节点

<global>
    <models>
        <your_module>
            <class>Namespace_Module_Model</class>
            <resourceModel>your_module_resource</resourceModel>
        </your_module>
        <your_module_resource >
        <class>Namespace_Module_Model_Resource</class>
        <deprecatedNode>cb_mysql4</deprecatedNode>
        <entities>
            <payment>
                <table>acs_transaction</table>
            </payment>
        </entities>
    </your_module_resource >
    </models>

之后,您可以在

中定义资源和数据库表
<global>
    <resources>

节点

答案 1 :(得分:0)

要获取Collection,您还需要通过Model配置来定义它。简单地说你需要3个文件:

Mynamespace/Mymodule/Model/Mymodel.php
Mynamespace/Mymodule/Model/Resource/MyModel.php
Mynamespace/Mymodule/Model/Resource/MyModel/Collection.php

Mynamespace / Mymodule / Model / Mymodel.php需要实现_init()方法并指向正确的资源模型;

class Mynamespace_Mymodule_Model_MyModel 
    extends Mage_Core_Model_Abstract {
    public function _construct() {
        $this->_init('mymodule/mymodel');
    }
}

然后在Mynamespace / Mymodule / Model / Resource / Mymodel.php需要指向正确的资源(table或eav)

class Mynamespace_Mymodule_Model_Resource_Mymodel
    extends Mage_Core_Model_Resource_Db_Abstract
    {
    public function _construct() {
        $this->_init('mymodule/mymodel', 'entity_id'); // entity_id - autoincrement column
    }
}

,您需要的最后一个文件是

Mynamespace / Mymodule / Model / Resource / Mymodel / Collection.php文件

class Mynamespace_Mymodule_Model_Resource_Mymodel_Collection
    extends Mage_Core_Model_Resource_Db_Collection_Abstract
    {
    public function _construct() {
        $this->_init('mymodule/mymodel');
    }
}

如果你想测试它,只需创建一个test.php文件并运行

var_dump(get_class(Mage::getModel('mymodule/mymodel'));
var_dump(get_class(Mage::getResourceModel('mymodule/mymodel'));
var_dump(get_class(Mage::getModel('mymodule/mymodel')->getCollection());

如果你得到3个班级名字,你就可以去了。