Magento覆盖客户资源模型

wut*_*aer 12 resources overriding magento

我试图覆盖

app\code\core\Mage\Customer\Model\Resource\Customer.php
Run Code Online (Sandbox Code Playgroud)

使用这个xml:

<models> 
    <customer_resource>
        <rewrite>
            <customer>My_Company_Model_Resource_Customer</customer>
        </rewrite>
    </customer_resource>     
</models>
Run Code Online (Sandbox Code Playgroud)

但我明白了

Mage registry key "_resource_singleton/customer/customer" already exists
Run Code Online (Sandbox Code Playgroud)

        <customer>
            <rewrite>
                <customer_resource>My_Company_Model_Resource_Customer</customer_resource>
            </rewrite>
        </customer>
Run Code Online (Sandbox Code Playgroud)

要么

    <models>
        <customer>
            <rewrite>
                <resource_customer>My_Company_Model_Resource_Customer</resource_customer>
            </rewrite>
        </customer>
    </models>
Run Code Online (Sandbox Code Playgroud)

什么都没发生

Ian*_*Ian 30

您应该能够使用您拥有的代码完成它.如果没有被覆盖,请尝试一些基础知识,例如确保已清除缓存.如果仍然无效,您可能正在与另一个已经覆盖它的模块进行斗争.在这种情况下,您需要找出确定哪一个获胜的后续步骤:合并逻辑,重写/扩展另一个,等等.

<models>
    <customer_resource>
        <rewrite>
            <customer>My_Company_Model_Resource_Customer</customer>
        </rewrite>
    </customer_resource>
</models>
Run Code Online (Sandbox Code Playgroud)


小智 5

我用以下xml做了(在1.7.0.2中):

<?xml version="1.0" encoding="UTF-8" ?>
<config>
<modules>
    <Final_Dummy>
        <version>0.0.1</version>
    </Final_Dummy>
</modules>
<frontend>
    <routers>
        <dummy>
            <use>standard</use>
            <args>
                <module>Final_Dummy</module>
                <frontName>dummy</frontName>
            </args>
        </dummy>
    </routers>
</frontend>
<global>
    <helpers>
        <dummy>
            <class>Final_Dummy_Helper</class>
        </dummy>
    </helpers>
    <models>
        <dummy>
            <class>Final_Dummy_Model</class>
            <resourceModel>dummy_resource</resourceModel>
        </dummy>
        <dummy_rsource>
            <class>Final_Dummy_Model_Resource</class>
            <deprecatedNode>dummy_mysql4</deprecatedNode>
        </dummy_rsource>
        <customer_resource>
            <rewrite>
              <customer>Final_Dummy_Model_Resource_Customer</customer>
            </rewrite>
        </customer_resource>
    </models>
</global>
</config>
Run Code Online (Sandbox Code Playgroud)

为了确保它真的有效,我创建了以下类:

<?php
class Final_Dummy_Model_Resource_Customer extends Mage_Customer_Model_Resource_Customer{
    public function amIHere(){
        return 'Yes sir';
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

并像这样调用模块控制器中的资源

<?php
class Final_Dummy_IndexController extends Mage_Core_Controller_Front_Action{
    public function indexAction(){
        $res=Mage::getResourceModel('customer/customer');
        die($res->amIHere());
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

结果是:

是的先生

我希望这些代码能以某种方式帮助您.记得清除缓存,我建议在开发阶段禁用Magento编译器.