Magento模型重写的最佳实践是什么?

时间:2013-06-19 14:59:20

标签: magento model rewrite

我的公司正在为Magento制作一个模块,以满足巴西商业规则的需求。

有时我们需要覆盖核心模型来添加功能,有时需要重写核心模型来改变某些功能。我们怀疑这是做这种变化的最佳做法。例如,当模块需要修改其他模型所拥有的某些行为时。

我们知道修改后的文件需要在“local / mycompany / modules ...”下创建,但我们遇到的问题将在下面介绍。

一个简单的例子是:我们的客户模型需要添加带有'99999-999'掩码的邮政编码,在最后三个字符之前添加' - '。没关系,它的完成和工作。但是当我们需要使用这个邮政编码进行计算时,我们需要删除' - '字符。这是在我们重写的“Shipping / Rate / Request.php”模型中进行的。

这是我们怀疑的一点。哪个最好?

“local / mycompany / Shipping / Model / Rate / Request.php”中的新“送货”模块中重写,或者在“客户”模块目录结构?

我们对我们需要决定的结构感到困惑。

重要的是我们不会分发或出售作为单独模块重新编写的模块。

我会在这里放一些代码:

邮政编码由我们的“客户”模块接收,输入掩码,由Javascript完成。 此“客户”模块向客户数据库添加更多字段。

在此,我在“客户”模块中重写“Shipping / Rate / Request.php”

在“Customers”模块的config.xml中:

<shipping>
  <rewrite>
    <rate_request>Mycompany_Customer_Model_Shipping_Rate_Request</rate_request>
  </rewrite>
</shipping>

然后文件“Mycompany / Customer / Model / Shipping / Rate / Request.php”包含从邮政编码中删除“ - ”字符的代码。

我们的疑问是:在某些情况下,我们需要再次重写“Shipping / Rate / Request.php”来修改其他方法。哪个最好?

  1. 每次重写都是在来自哪个模块内完成的?创建同一类的重复文件。
  2. 在“Mycompany”命名空间内使用Magento核心的相同目录结构,并在每个类的一个文件中修改我们需要的所有内容?像Magento的核心?
  3. 我不知道我是否可以解释我的需要。

    谢谢!

1 个答案:

答案 0 :(得分:0)

最好将模块的内容保存在其模块文件夹中。

如果你所谈论的扩展是模块功能的一部分,那么你应该将它们放在该模块的文件夹中。那么路径将是local / mycompany / Mymodule / Model / Shipping / Rate / Request.php。

我会在dir结构中创建这个额外的级别,以便更清楚重写的Request.php来自Shipping模块,但这绝对不是必需的。

这是一个好的做法当然是模块化的原因。您将能够更好地添加,删除和版本一个文件夹中包含的模块。考虑app / etc / modules中的模块xml文件和模块目录中的配置文件。它们描述了模块目录中的内容,而不是所有属于它的重写但位于不同模块文件夹中的内容。

此外,如果您已经从多个模块扩展或重写了相同的模型,并且您决定删除或完全重写您自己的模块,如果它们分散在哪里,您将如何知道哪些文件或文件的某些部分属于它? app dir。

有关如何创建Magento模块的更详细视图,请查看http://www.magentocommerce.com/magento-connect/create_your_extension/