【问题标题】:How to override method from model of module in yii?如何在 yii 中覆盖模块模型中的方法?
【发布时间】:2014-10-10 19:47:02
【问题描述】:

我想在我在 yii 上的几个项目中使用第三方模块。 例如模块 cmets https://github.com/segoddnja/Comments-module

通常需要对特定项目的模块进行一些更改。 如果我需要使用自定义视图,我只需将它们复制到主题中并进行修改。 如何覆盖位于模块中的 php 类中的方法? 例如我想修改模型类中的方法。我该怎么做?

提前致谢

【问题讨论】:

  • 我不明白你的问题,只是在应用程序模块目录中的模块目录中找到模型文件,覆盖你想要的方法并随意
  • 你能给我一个代码示例,它允许我从这个模块模型扩展 github.com/segoddnja/Comments-module/blob/master/models/… 并覆盖一些方法。我应该把文件放在哪里,这将扩展该模型?
  • @Mikola laviro 如果您的模块已经加载到您的主应用程序上,您可以使用继承覆盖模型,例如将您的自定义模型放在 protected/components/mymodel.php 上:class mymodel extends ModuleModel {. ...,}
  • 亚历杭德罗,你说得对,我能做到。但是我如何告诉模块中的所有文件,它们应该使用 mymodel 而不是 ModuleModel?例如在 mdule 控制器中将是下一个代码“new Modulemodel”。那么mymodel就不会用了吗?
  • @Mikola laviro 在你代码的其他部分你应该使用“new mymodel”而不是“new ModuleModel”

标签: php yii


【解决方案1】:

如果你经常使用这个 cmets 模块 repo,但它似乎不是你喜欢(或需要)它的方式,那么 fork 吧!

fork 存储库,并按照您喜欢的方式编辑代码。只有您知道您需要它如何工作。添加您自己的自定义函数,您自己的助手,完全拆分现有函数以按照您想要的方式工作。

请记住,对于 OOP,您的重点是重用能力。创建可用于未来项目的类和函数。

如果您有一个每次都使用的功能,但对于 10 个项目中的 1 个,您需要更改它,然后扩展它。您可以扩展您的类并覆盖该功能。所以唯一会改变的是,你会添加一个新的类来扩展你现有的类,并且只有你需要重写的那几个函数。

要扩展它,您只需在组件中创建一个新文件,就像有人说的那样。除非您启动主配置,否则组件目录中的所有文件都会自动加载。只需确保文件名与类名相同即可!

以您的 CommentsModule 为例。它们扩展了 CWebModule。 CommentsModule 具有 CWebModule 具有的所有函数和变量,但可以具有更多函数/变量,或覆盖 CWebModule 中定义的函数/变量。它基本上劫持了它。

Class CommentsModule Extends CWebModule{}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 2014-03-17
    • 2016-12-06
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多