我正在开发一个在我公司使用的任务管理应用程序。规范的一部分是创建一个插件系统,允许用户根据自己的需要或部门的需要定制和扩展功能。我很乐意以一种非常优雅和模块化的方式来做这件事,但我很难弄清楚该怎么做。
考虑一个作为任务列表的视图:生成循环的每一次迭代都会在两端添加一个pre_task()和post_task()调用,这将在任务标题的两端(完整复选框、注释链接等)构建交互部分。现在,当系统检测到并包含插件文件plugin_time_tracking.php时,插件应该会向post_task()添加功能-除了其他所有功能之外,还会添加一个"track time“按钮。
我想要完成的是将插件“挂钩”到pre_task()或post_task()上--让它通过将自己附加到适当的函数并扩展它们来完成所有的跑腿工作,而不是让核心排序插件将它们的函数集中到正确的地方。PHP提供这样的功能吗?我是不是走错路了?如果我需要澄清,请告诉我--谢谢你的帮助!
发布于 2013-03-08 18:32:48
Qafoo的男孩们在2012年的PHPBenelux会议上做了一个关于模块化的演讲。他们提供了各种选项来创建模块化应用程序,如挂钩、修补和继承。
您可以查看该演示文稿here的幻灯片。
发布于 2013-03-05 23:50:31
我认为你真的应该使用一个框架,它有一个内置的插件基础设施,可以覆盖/继承。举个例子,假设是Symfony2。在sf2中,您可以创建构建表单的FormType类(然后将某些数据传递给视图)。因此,在这种情况下,要添加字段,另一个团队只需扩展您的FormType并修改构建以添加新字段。此外,表单Api支持嵌入子表单,因此如果他们想要时间跟踪,那么只需将其嵌入到任务表单中,或者通过您提供的任何配置工具来“打开它”。
与render things类似,您可以简单地通过在不同的级别提供或引用不同的Bundle (一种插件)来定义覆盖视图模板。
现在Symfony2非常复杂,它有很高的学习曲线,所以它可能是你应该选择的框架,也可能不是你应该选择的框架,但沿着这些路线的东西将是非常合适的。“钩子”函数的WP/Drupal模式使用起来非常烦人,特别是当它们在更深的层上构建HTML字符串,而不是为您提供您认为合适的原始数据输出时。
https://stackoverflow.com/questions/15164798
复制相似问题