如何重写magento core-cache-model (Mage_Core_Model_Cache)
Posted
技术标签:
【中文标题】如何重写magento core-cache-model (Mage_Core_Model_Cache)【英文标题】:How to rewrite the magento core-cache-model (Mage_Core_Model_Cache) 【发布时间】:2012-04-18 08:52:39 【问题描述】:我必须重写核心缓存模型。这是行不通的。我第一次尝试解决这个问题是尝试用另一个模型重写...... 在我的 config.xml 中,我声明了以下内容
<global>
<models>
<core>
<rewrite>
<**layout**>MyCompany_MyModule_Model_Core_Cache</**layout**>
</rewrite>
</core>
</models>
....
在我的课堂上我死在了构造函数中。
这很完美! 所以我改写模型的可能性是正确的。
但是如果我不使用 xml 中的布局节点而是使用缓存节点,这将不起作用。
所以我的尝试如下,但这是行不通的:
<global>
<models>
<core>
<rewrite>
<cache>MyCompany_MyModule_Model_Core_Cache</cache>
</rewrite>
</core>
</models>
....
我现在的问题:有没有办法重写/重载“缓存核心模型”???
【问题讨论】:
对我来说看起来不错...可能是缓存问题 :) 清除缓存? 是的,对我来说也很好...我清理了缓存并删除了文件夹 var/cache 和 var/session,如果我将缓存节点更改为布局节点,它会立即工作:(布局模型) 任何其他想法为什么这不起作用?! 【参考方案1】:我也在尝试做同样的事情,但我认为这是不可能的。如果你在方法中 var_dump 输出 $this->_xml->group->models: getGroupedClassName (app/code/core/Mage/Core/Model/Config.php) 你会注意到你的重写它还不可用,因此为什么它被跳过。
如果您尝试覆盖 translate 或 layout: your_class_model 您会注意到 $this->_xml... 转储了初始核心类(没有重写),您会看到您的重写远远超过了核心/缓存。因此,它可能已被覆盖,但该类已被实例化、设置和使用;所以它真的不会触发任何东西。
因此我认为不可能覆盖核心/缓存。您必须将其移动到应用程序/代码/本地。可怜。
【讨论】:
感谢您的回答...是的,这也是我提出的“解决方案”...但是在我看来,将核心文件复制到本地并不是一个好方法。但这显然是唯一的方法。真可怜。【参考方案2】:缓存将在加载模块配置(config.xml)之前初始化。缓存模型使用 Mage::getModel 实例化,它将模型名称缓存在注册表中。 因此,以后所有尝试获取自定义缓存模型的尝试也会失败。
解决方法:把这个rewrite语句放在etc/local.xml中。这有点脏,因为 local.xml 应该只包含与模块无关的东西。但这比将核心文件复制到本地要好。
【讨论】:
你说,有点脏,那么,你有别的解决办法吗?【参考方案3】:我有同样的问题,但我的解决方案与你的有点不同;-)
Magento 将先从 /app/etc/*.xml 加载 XML 文件(这些文件不会被缓存),然后再加载 magento 中的所有其他内容。 所以我在这里创建了自己的文件“cache.xml”,内容是
<?xml version="1.0"?>
<config>
<global>
<models>
<core>
<rewrite>
<cache>MyCompany_MyModule_Model_Core_Cache</cache>
</rewrite>
</core>
</models>
</global>
</config>
在 1.6、1.7 和 1.8 中完美运行
【讨论】:
这给了我Fatal error: Call to a member function processRequest() on a non-object in /var/www/magento-20161207-1/mage-webroot/app/code/core/Mage/Core/Model/App.php on line 351
1.9.2.4。以上是关于如何重写magento core-cache-model (Mage_Core_Model_Cache)的主要内容,如果未能解决你的问题,请参考以下文章