Php 创建;引擎“;是否允许集成到主web应用程序?
背景: 我目前有一个基于MVC Kohana PHP框架的web应用程序,允许用户向客户销售电子书 webapp背后的代码都连接在一起,除了以API为中心外,其他一切都是以API为中心的。 它运行纯MVC,然后使用mustache作为模板系统 我想做什么: 我想整合各种会计服务(来自更大的北欧供应商,如e-economic.com),但同时也拥有可以让用户优化其销售的整合,等等 我想归档的是做一些东西,称之为引擎,它允许功能集成(flexibely)到Web应用程序的各个部分,无论是在视图部分还是控制器/逻辑中 从背景和技术角度来看,有哪些方法可以做到这一点? 我的想法是,我需要在Web应用程序的不同区域使用某种占位符。然后我需要这些占位符与一个“引擎”一起工作,然后检查要在这些区域“运行”的集成 这样行吗?你会怎么做Php 创建;引擎“;是否允许集成到主web应用程序?,php,model-view-controller,architecture,kohana,Php,Model View Controller,Architecture,Kohana,背景: 我目前有一个基于MVC Kohana PHP框架的web应用程序,允许用户向客户销售电子书 webapp背后的代码都连接在一起,除了以API为中心外,其他一切都是以API为中心的。 它运行纯MVC,然后使用mustache作为模板系统 我想做什么: 我想整合各种会计服务(来自更大的北欧供应商,如e-economic.com),但同时也拥有可以让用户优化其销售的整合,等等 我想归档的是做一些东西,称之为引擎,它允许功能集成(flexibely)到Web应用程序的各个部分,无论是在视图部分还
更新试图使其更清楚: 因此,我想实现的是拥有独立的功能,可以集成到现有的主Web应用程序中 假设我有一个名为integrations/的文件夹,在这里有两个不同的集成,影响系统的不同部分 第一个是Kashflow(会计软件)集成,它从我们的系统中获取一些数据并发送到Kashflow(API方式,很好),但在我的webapp中的“订单”下也会说明它是否已经同步到Kashflow。(这是问题所在的部分) 另一个集成可能是“特色电子书”集成。这只是让你选择什么产品应该是特色产品,然后在电子书商店,特色产品将突出显示,周围有橙色边框和一些较大的文本。(这是问题的部分) 粗体标记的工作情况如何?像Shopify这样的网店供应商有这样的应用程序,而所有其他的SaaS应用程序都有这样的技术解决方案 我想知道是什么?我如何允许单独的功能影响基本webapp 我希望现在情况变得更清楚了
最新更新: 我所寻找的答案是基于上述背景的答案,即我如何实现一个解决方案,从我现在的位置实现这一点 一个好的答案应该是,也可以用文本/伪文本的方式来描述如何实现我提到的一个示例插件/集成
那么,集成如何与主应用程序通信,主应用程序有哪些功能来接受/允许功能呢 根据您的更新,我认为您为需要模块化的web应用程序描述了一个很好的案例。您希望能够轻松地添加新的模块(插件),从而提供不同的功能,而无需每次更改应用程序核心 以下是从概念角度对您的挑战的可能解决方案。我的目的是帮助你掌握这个想法,并让你开始。请记住,它可以进一步简化或变得更复杂,这取决于您的需要
事物的理论方面
- 在Plugins/Modules文件夹下有自己的子目录,遵循预定义的结构(例如Backend/Portlets/InstallScripts等)
- 在数据库中使用单独的存储沙盒,专用于此插件。以Kashflow为例–插件使用的所有表都可以以ksflw_uu前缀开头
- 带来自己的部分前端视图演示文稿(以及底层控制器逻辑和模型),实现特定功能集(例如,以橙色边框显示预选书籍)
- 自带在站点后端处理的部分后端视图演示文稿(以及底层控制器和模型)(在Kashflow的情况下,您有一个portlet可视化,它可能会呈现一个按钮来手动执行同步,使您能够安排一个并显示上一次同步的日期时间)
- 有一个安装程序脚本,用于创建表、插入菜单项和初始化钩子订阅(请参阅下一个项目符号)
- 初始化挂钩订阅–只要系统中某个地方发生注册事件,就会调用所有订阅的插件函数
- 插件管理器–GUI,允许您安装、删除、启用/禁用插件,并允许客户端访问插件
- 局部视图管理器–允许用户选择在现有占位符中显示哪些插件的局部视图(这将与挂钩一起使用)
- 部分视图的占位符位于您希望用户显示插件UI和信息的页面上
- 在整个应用程序中使用钩子
<div class="widget_sidebar"> <?php echo Request::factory('widget_orangebook/display/3')->execute(); ?> </div>
public function action_display ($number_of_books){...}