Magento 覆盖来自 Mage_Core 的模型

问题描述 投票:0回答:1

当我尝试覆盖 Mage_Catalog 中的模型(例如 Mage_Catalog_Model_Product_Image)时,我没有问题,但是当我尝试覆盖 Mage_Core 中的模型(Mage_Core_Model_File_Uploader)时,它不起作用。

Mage_Core 有某种保护吗? 我不能使用观察者来代替,所以我真的必须让它发挥作用。

我的config.xml:

<models>
    <myshop>
        <class>Adrien_Myshop_Model</class>
    </myshop>
    <core>
        <rewrite>
            <file_uploader>Adrien_Myshop_Model_Core_File_Uploader</file_uploader>
        </rewrite>
    </core>
    <catalog>
        <rewrite>
            <product_image>Adrien_Myshop_Model_Catalog_Product_Image</product_image>
        </rewrite>
    </catalog>
</models>

我的新上传器模型:

class Adrien_Myshop_Model_Core_File_Uploader extends Mage_Core_Model_File_Uploader
{
    protected function _moveFile($tmpPath, $destPath)
    {
        Mage::log("custom upload");
        return parent::_moveFile($tmpPath, $destPath);
    }

}

我还将调试日志放入 Mage_Core_Model_File_Uploader::_moveFile 中,当我运行脚本时,我仅从 Mage_Core_Model_File_Uploader 获取日志。

但是,当我使用 Catalog_Product_Image 对其进行测试时,我正确地获取了两个调试日志。

magento model overwrite
1个回答
3
投票

如果你 grep 该类名的源代码,你可以看到它是通过

new
在 PHP 中直接调用的,因此无法重写。

如果您必须重写此类,则需要将其复制到本地代码池并在其中进行更改,请注意,您需要在升级应用程序时合并新的更改。

© www.soinside.com 2019 - 2024. All rights reserved.