当我尝试覆盖 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 对其进行测试时,我正确地获取了两个调试日志。
如果你 grep 该类名的源代码,你可以看到它是通过
new
在 PHP 中直接调用的,因此无法重写。
如果您必须重写此类,则需要将其复制到本地代码池并在其中进行更改,请注意,您需要在升级应用程序时合并新的更改。