【问题标题】:What is the best practices in Magento model rewrite?Magento 模型重写的最佳实践是什么?
【发布时间】:2013-06-16 04:30:06
【问题描述】:

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

有时我们需要重写核心模型来增加功能,有时需要重写核心模型来改变一些功能。我们怀疑这是进行此更改的最佳实践。例如,当一个模块需要修改其他模型所拥有的某些行为时。

我们知道修改后的文件需要在 "local/mycompany/modules..." 下创建,但我们遇到了一个问题,我将在下面描述。

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

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

"local/mycompany/Shipping/Model/Rate/Request.php" 中的新 "Shipping" 模块中执行此重写或在 中执行此重写>“客户”模块目录结构?

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

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

我会在这里放一些代码:

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

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

在“客户”模块的 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 的核心?

我不知道我是否可以解释我需要什么。

谢谢!

【问题讨论】:

  • 请添加一些代码示例并拆分您的文本,使其更具可读性。这样你会得到更多的答案。

标签: magento model rewrite


【解决方案1】:

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

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

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

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

此外,如果您从多个模块扩展或重写了相同的模型,并且您决定删除或完全重写您自己的模块,那么如果它们分散在各处,您如何知道哪些文件或文件的一部分属于它应用程序目录。

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

【讨论】:

    猜你喜欢
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 2014-01-22
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多