如何重写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)的主要内容,如果未能解决你的问题,请参考以下文章

Magento 重复类重写

Magento 模块的 URL 重写

Magento 重写核心模型资源集合

Magento - URL 重写或重定向问题

网址重写导致 Magento 管理员无法访问

magento重写资源类型的models