2014-10-10 93 views
3

我想在我的几个项目中使用第三方模块。 例如模块评论https://github.com/segoddnja/Comments-module如何从yii中的模块模型中覆盖方法?

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

在此先感谢

+0

我不明白你的问题,而只是找到里面的应用模块目录模块目录里面的模型文件,重写需要的方法,并随时 – osmancode 2014-10-11 07:36:34

+0

你可以给我的代码的一个例子,是让我从延伸这个模块的模块https://github.com/segoddnja/Comments-module/blob/master/models/Comment.php并重写一些方法。我应该在哪里放置文件,这将扩展该模型? – 2014-10-11 12:34:06

+0

@Mikola laviro如果你的模块已经加载到你的主应用程序中,你可以使用继承覆盖你的自定义模型例如protected/components/mymodel.php的模型:class mymodel extends ModuleModel {....,} – 2014-10-15 18:07:40

回答

0

如果使用这样的评论模块回购了不少,但似乎它只是不喜欢的方式(或需要),然后用叉子叉了!

分叉回购,并按您喜欢的方式编辑代码。只有你知道你是如何工作的。添加你自己的自定义函数,你自己的帮助者,完全切断现有函数,以你想要的方式工作。

请记住,使用面向对象的时候,你的焦点是重用能力。创建可用于未来项目的类和函数。

如果您有每次使用的功能,但对于需要对其进行更改的10个项目中的1项,请将其扩展。您可以扩展您的课程并覆盖该功能。所以唯一会改变的是,你会添加一个新的类来扩展你现有的类,并且只有那些你需要覆盖的几个函数。

要扩展它,您只需按照某人的说法在组件中创建一个新文件。除非你使用主配置,否则组件目录中的所有文件都是自动加载的。只要确保文件的名称与课程相同即可!

只要看看你的评论模块。它们扩展了CWebModule。 CommentsModule具有CWebModule具有的所有函数和变量,但可以包含更多的函数/变量,或者覆盖CWebModule中定义的函数和变量。它基本上被劫持了。

Class CommentsModule Extends CWebModule{}