Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为php应用程序模块化插件/扩展功能?_Php_Plugins_Module_Hook - Fatal编程技术网

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

如何为php应用程序模块化插件/扩展功能?,php,plugins,module,hook,Php,Plugins,Module,Hook,我正在开发一个任务管理应用程序,供我的公司使用。规范的一部分是创建一个插件系统,允许用户根据需要或部门要求自定义和扩展功能。我很想以一种非常优雅和模块化的方式来做这件事,但我很难弄清楚怎么做 考虑一个任务列表视图:生成循环的每次迭代都会在任一端添加一个pre_task()和post_task()调用,这将在任务标题的任一端构建交互部分(完成复选框、注释链接等)。现在,当系统检测到并包含插件文件plugin\u time\u tracking.php时,插件应该向post\u task()添加功能

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

考虑一个任务列表视图:生成循环的每次迭代都会在任一端添加一个
pre_task()
post_task()
调用,这将在任务标题的任一端构建交互部分(完成复选框、注释链接等)。现在,当系统检测到并包含插件文件
plugin\u time\u tracking.php
时,插件应该向post\u task()添加功能-除了其他所有内容之外,还添加了一个“track time”按钮


我想完成的是将插件“钩住”到pre_task()或post_task()——让它通过连接到适当的函数并扩展它们来完成所有的工作,而不是让核心插件排序并将它们的函数集中到正确的位置。PHP提供这样的功能吗?我走错方向了吗?如果我需要澄清,请告诉我-谢谢你的帮助

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

与render things类似,您可以通过在不同级别提供或引用不同的包(某种插件)来定义覆盖视图模板


现在Symfony2非常复杂,它有很高的学习曲线,所以它可能是您应该选择的框架,也可能不是您应该选择的框架,但是沿着这些思路的东西将是非常合适的。“hook”函数的WP/Drupal模式令人难以置信地讨厌,尤其是当它们在更深的层上构建HTML字符串,并且不提供您认为合适的原始数据来输出时。

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


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

装饰图案,这是您想要的吗?谢谢你的建议!我在这里受到TTL的限制,所以学习曲线越小越好。你能推荐一些不那么健壮,开箱即用的东西吗?你的TTL是什么,你对OOP有多少经验?我把自己放在OOP的中间阶段-他们希望在月底部署,这给了我大约两周的时间让系统的这一部分运转起来有点粗糙,因为你将在学习过程中学习任何框架。拉威尔也许是个不错的选择。在这里,它有一个相当小的学习曲线,它有一个捆绑系统。我不知道他们的捆绑包是如何工作的,所以我不知道它是否符合我的建议,但你可能想看看它。它可能会有帮助:正是我想要的。谢谢