2015-05-08 41 views
-1

請!我陷入了這個問題約一個月。Magento不會正確加載config.xml並且getResourceModel返回false

我原來的問題是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> 

由於資源。

回答

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> 

node

+0

嗨,謝謝你的回答,在我修正了xml之後,它通過了先前的斷點,然後命中了新的錯誤'致命錯誤:調用成員函數getConnection()我在這行'$ this - > _ resources-> getConnection($ connectionName);''上跟蹤了它在Resource/DB/Abstract.php上的代碼, ...似乎_resources是空的...這個問題的可能性是什麼?任何特殊的配置設置這個工作?我提到的核心模塊和簡單的作品沒有任何額外的......累了...... :( – KKLN

0

要獲取集合,還需要通過模型配置來定義它。簡單地說,你需要3個文件:

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

了myNameSpace/Mymodule中/型號/ Mymodel.php需要有_init()方法來實現,並指向正確的資源模型;

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

然後在了myNameSpace/Mymodule中/型號/資源/ Mymodel.php需要指向糾正你需要的資源(表或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'); 
    } 
} 

如果你想測試它它的工作原理簡單的cre吃了一個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個類名,你就要去了。

+0

嗨,感謝您的回覆,我有所有這些文件,但沒有工作......我目前正在做的只是簡單的創建一個模型,設置一些值並保存到數據庫...這就是所有 '$ _tran = Mage :: getModel('mymodule/mymodel'); ...分配一些值... $ _tran-> save( );」 – KKLN

相關問題