2013-03-01 27 views
0

我正在开发一个任务管理应用程序供我的公司使用。部分规范是创建一个插件系统,使用户可以根据需要定制和扩展功能,或根据其部门的要求进行扩展。我很乐意以一种非常优雅和模块化的方式来做到这一点,但我很难弄清楚如何做到这一点。如何模块化php应用程序的插件/扩展功能?

考虑一个观点,这是一个任务列表:发电循环的每次迭代增加了对任一端pre_task()post_task()调用,它建立在任务标题(Complete复选框,评论链接等)两端的互动作品。现在,当系统检测并包含插件文件plugin_time_tracking.php时,该插件应该为post_task()添加功能 - 除了其他所有内容外,还要添加“跟踪时间”按钮。

我想要完成的是将插件“挂钩”到pre_task()或post_task()上 - 让它通过附加到适当的函数并扩展它们来完成所有的工作,而不是核心排序插件并将它们的功能放到正确的地方。 PHP提供这样的功能吗?我是否以这种错误的方式去做?让我知道是否需要澄清 - 谢谢你的帮助!

+0

装饰模式,你是不是? (http://en.wikipedia.org/wiki/Decorator_pattern) – Boynux 2013-03-01 18:53:54

回答

1

Qafoo的男孩们在2012年PHPBenelux会议上发表了关于模块化的讨论。他们提出了各种选项来创建模块化应用程序,例如钩子,修补和继承。

您可以查看该演示文稿的幻灯片here

+0

正是我在找。谢谢! – CodeMoose 2013-03-08 13:01:18

0

我认为你应该真的使用一个内置插件基础结构的框架,并具有覆盖/继承功能。举一个例子,让我们说Symfony2。在sf2中,您可以创建FormType类来构建表单对象(然后将某些数据传递给他查看)。因此,在这种情况下,添加字段时,另一个团队只需要扩展FormType并修改构建以添加新字段。进一步的表单API支持嵌入子表单,所以如果他们想要时间跟踪然后只需要将其嵌入任务表单或通过您提供的任何配置工具“打开它”。

与渲染事物类似,您可以简单地通过提供不同级别或引用不同的Bundle(一种插件)来定义覆盖视图模板。

现在Symfony2是非常复杂的,它有很高的学习曲线,所以它可能或我不是你应该选择的框架,但沿着这些方向的东西将会更合适。 “钩子”函数的WP/Drupal模式非常令人讨厌,特别是如果他们正在更深层次上构建HTML字符串,并且不会在您认为合适的情况下为您提供原始数据输出。

+0

感谢您的建议!我受到TTL的限制,因此学习曲线越小越好。你能推荐一些不太强大的东西,多一点开箱即用? – CodeMoose 2013-03-05 16:42:34

+0

什么是您的TTL,以及您与OOP有多少经验? – prodigitalson 2013-03-05 17:12:39

+0

我会把自己置于OOP的中间 - 他们在本月底期待部署,这让我花了大约两周的时间才得到系统的这部分启动 – CodeMoose 2013-03-05 18:02:26