如何模块化php应用程序的插件/扩展功能?

时间:2013-03-01 18:50:22

标签: php plugins module hook

我正在开发一个在我公司使用的任务管理应用程序。该规范的一部分是创建一个插件系统,允许用户根据需要或部门需要自定义和扩展功能。我喜欢以一种非常优雅和模块化的方式做到这一点,但我很难搞清楚如何。

考虑一个视图,它是一个任务列表:生成循环的每次迭代都会在任一端添加pre_task()post_task()调用,这将在任务标题的任一端构建交互式部分(完成复选框) ,评论链接等)。现在,当系统检测到并包含插件文件plugin_time_tracking.php时,该插件应该为post_task()添加功能 - 除了其他所有内容之外还添加“跟踪时间”按钮。

我想要完成的是将插件“挂钩”到pre_task()或post_task() - 让它通过将自身附加到正确的函数并扩展它们而不是使用核心排序插件来完成所有的工作并将他们的职能放到正确的地方。 PHP提供这样的功能吗?我是以错误的方式来做这件事的吗?如果我需要澄清,请告诉我 - 感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

Qafoo的男孩们在2012年版的PHPBenelux会议上谈到了模块化问题。他们提出了各种选项来创建模块化应用程序,如钩子,修补和继承。

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

答案 1 :(得分:0)

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

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

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