相同的模块名称,不同的名称空间在magento中冲突

时间:2013-05-23 10:28:15

标签: php magento

如果我们有两个名称相同但命名空间不同的模块,它们会发生冲突吗?

例如:

  1. A_Module_Helper_Data

  2. B_Module_Helper_Data

  3. 现在发生的事情是,当我打电话给Mage::helper('module')->someMethod();时,它说 someMethod中的方法存在时,A_Module_Helper_Data中找不到B_Module_Helper_Data

    magento如何区分这个? 什么是可能的解决方案?

2 个答案:

答案 0 :(得分:3)

这是您在config.xml中注册模块的方式。特别是在helper示例中,请查看GiftMessage模块的config.xml的这一部分:

<helpers>
    <giftmessage>
    <class>Mage_GiftMessage_Helper</class>
    </giftmessage>
</helpers>

注意<giftmessage>部分 - 这是你正在寻找的钩子。因此,当您键入$this->helper('giftmessage')时,它将查找在该键下注册的第一个(或最后一个,并不重要)的类。

答案 1 :(得分:1)

完全可以在不同的命名空间中运行具有相同名称的2个模块,但您必须小心。

就像Netismine所说的那样,2个模块的config.xml是最重要的。

如果你的2个模块共享相同的helper xml标识符节点(例如<giftmessage>)并且你没有做任何重写:magento将加载最后一个模块的帮助器(请记住,magento合并所有的XML)按字母顺序和/或依赖订单的文件。)

对于您的情况,您有2个解决方案,以确保呼叫正确的帮助:

  • 模块B重写模块A(模块B中的<rewrite>机制config.xml + PHP类B扩展PHP类A)以获取giftmessage辅助层的“所有权”标识符

  • 使用不同的标识符注册模块B辅助层:(例如<b_giftmessage>)并在PHP代码中使用它

希望这有帮助