0

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

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

我想要完成的是使插件“挂钩”到 pre_task() 或 post_task() - 让它通过将自身附加到适当的功能并扩展它们来完成所有的工作,而不是拥有核心排序插件并放牧它们功能到正确的地方。PHP 是否提供这样的功能?我会以错误的方式解决这个问题吗?让我知道是否需要澄清 - 感谢您的帮助!

4

2 回答 2

1

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

您可以在此处查看该演示文稿的幻灯片。

于 2013-03-08T10:32:48.117 回答
0

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

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

现在 Symfony2 非常复杂,学习曲线很高,所以它可能是也可能不是你应该选择的框架,但沿着这些思路的东西会更合适。“钩子”函数的 WP/Drupal 模式使用起来非常烦人,尤其是当它们在更深的层上构建 HTML 字符串并且没有按照您认为合适的方式为您提供要输出的原始数据时。

于 2013-03-05T15:50:30.860 回答