我不能在自定义模块中使用相同的节点。 &#34; <API>&#34;在模块的config.xml中?

时间:2016-02-09 12:53:42

标签: magento magento-1.9

Core Magento有Mage::getModel("api/modulename");

现在,我有一个在<api>中使用config.xml节点的自定义模块 喜欢:

<models>
        <api>
              <class>Packagename_API_Model</class>
              <resourceModel>api_mysql4</resourceModel>
        </api>
        <api_mysql4>
                <class>Packagename_API_Model_Mysql4</class>
                <entities>
                    <apilog>
                        <table>bh_api_log</table>
                    </apilog>
                </entities>
        </api_mysql4>
<models>

所以现在我在magento中遇到错误

  

致命错误:在非对象上调用成员函数getCollection()   在第48行的code \ core \ Mage \ Adminhtml \ Block \ Api \ Grid \ Role.php中

因为我在自定义模块中使用了<api>的相同节点标记。

我不能使用相同的节点<api>吗? 如何在core和mycustom模块中使用相同的节点标记,以便两者都能正常工作?

1 个答案:

答案 0 :(得分:0)

你确实不能在Magento中为同一类型的句柄使用两次相同的节点。

最佳做法实际上是说,对于自定义模块,您的句柄应始终使用packagename_modulename作为句柄。

我们说我的模块config.xml实际上在app/code/local/B/Enoit/etc/config.xml,定义句柄的标准方式实际上是指示我以这样的方式编写config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <B_Enoit>
            <version>0.0.0.1</version>
        </B_Enoit>
    </modules>
    <global>
        <models>
            <b_enoit>
                <class>B_Enoit_Model</class>
                <resourceModel>b_enoit_resource</resourceModel>
            </b_enoit>
            <b_enoit_resource>
                <class>B_Enoit_Model_Resource</class>
                <entities>
                    <some_table>
                        <table>b_enoit_some_table</table>
                    </some_table>
                </entities>
            </b_enoit_resource>
        </models>
    </global>
</config>