如何重写magento核心缓存模型(Mage_Core_Model_Cache)

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

我必须重写核心缓存模型。但这是行不通的。我解决这个问题的第一次尝试是尝试用另一个模型重写...... 在我的 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>
  ....

我现在的问题:有没有办法重写/重载“缓存核心模型”???

class caching magento url-rewriting
3个回答
4
投票

缓存将在加载模块配置(config.xml)之前初始化。缓存模型是用 Mage::getModel 实例化的,它在注册表中缓存模型名称。 因此,以后所有获取自定义缓存模型的尝试也将失败。

解决方案:将此重写语句放在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 中完美运行


2
投票

我也在尝试做同样的事情,但我认为这是不可能的。如果您在方法中 var_dump 出 $this->_xml->group->models: getGroupedClassName (app/code/core/Mage/Core/Model/Config.php) 您会注意到您的重写尚不可用,因此为什么它被跳过。

如果您尝试覆盖translate或layout:your_class_model,您会注意到$this->_xml...转储初始核心类(没有重写),并且您会看到您的重写远远超出了核心/缓存。因此,它可能被覆盖,但该类已经实例化、设置和使用;所以它真的不会触发任何东西。

因此我认为不可能覆盖核心/缓存。您必须将其移至应用程序/代码/本地。可怜。

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