【问题标题】:Magento duplicate class rewriteMagento 重复类重写
【发布时间】:2011-07-18 04:21:02
【问题描述】:

我正在使用两个不同的 Magento 模块,比如 First_ModuleSecond_Module,它们覆盖了同一个类。我想结合它们的功能。
我的假设是我可以从First_Module 中的同一类扩展重复的类Second_Module,这反过来又扩展了原始类。 我猜要做到这一点,First_Module 应该依赖于Second_Module,所以我在模块的配置中添加了<depends>Second_Module</depends>

我现在希望配置加载器首先加载Second_Module,并且它不再有效的重复类标记将被First_Module 配置中的相同语句覆盖。但情况似乎并非如此。第一个rewrite好像用了。

我做错了什么/理解错了还是这就是它的工作原理?也许我应该从配置中的第二个模块中删除重写(我宁愿不这样做以使其尽可能保持原始状态)。

提前致谢。

【问题讨论】:

    标签: class magento module duplicates rewrite


    【解决方案1】:

    Magento 类自动加载器不是为一个类的多个覆盖而设计的,因为这个概念实际上没有任何意义。没有办法强制第二个覆盖尊重第一个覆盖,因此他们根本没有实现它。

    此外,您通常不能依赖安装两个单独的模块(在核心模块之外),因此您容纳其他覆盖的能力充其量是脆弱的。

    如果你想做到这一点,首先看看 Magento 的事件委托系统。许多侦听器可以对一个事件进行操作,因此这对您来说可能是一种自然的情况。

    此外,正如其他人最近在一个问题中指出的那样,您可以创建同一类的两个子类,并使用其中的每一个而不是原来的。这将不允许您修改现有的系统行为,但如果您只需要扩展核心类,它可能就足够了。在这种情况下,您将直接调用这些类(如Mage::getClass("mymodule/extended_customer");

    希望能对情况有所了解。

    谢谢, 约瑟夫·马斯蒂

    【讨论】:

    • +1 用于更多该死的事件观察者使用。我希望人们不要再覆盖核心类,我希望 Magento 团队会添加更多的挂钩点,这样我们就不必这样做了。
    • @Nick,也许我们需要一个活动来为数百个事件集成点提交社区补丁。
    • 您是否签署了 MCA 以提交代码?如果一整批带有新事件分派的提交命中 repo,那么看看他们的响应会很有趣
    • @Jonathan 还没有,但我可能会这样做
    【解决方案2】:

    作为一个旁白回答约瑟夫,可以为你省去很多麻烦,你可以简单地制作第二个重写类(magento重写系统没有看到的那个),成为重写后看到的类的祖先(首先读取 Joseph 指出的配置),因此如果两个类都不会影响相同的方法,那么您将最终拥有两个功能和一个重写..

    我经常为“通用客户密码”扩展程序这样做,我的客户发现它非常有用,但碰巧重写了客户模型,并且根据经验,它是一个客户类,它经常被许多商业扩展程序重写还是不..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-13
      • 2015-12-08
      • 2013-01-07
      • 2016-04-18
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      相关资源
      最近更新 更多