Php 创建;引擎“;是否允许集成到主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应用程序的各个部分,无论是在视图部分还

背景:

我目前有一个基于MVC Kohana PHP框架的web应用程序,允许用户向客户销售电子书

webapp背后的代码都连接在一起,除了以API为中心外,其他一切都是以API为中心的。 它运行纯MVC,然后使用mustache作为模板系统

我想做什么:

我想整合各种会计服务(来自更大的北欧供应商,如e-economic.com),但同时也拥有可以让用户优化其销售的整合,等等

我想归档的是做一些东西,称之为引擎,它允许功能集成(flexibely)到Web应用程序的各个部分,无论是在视图部分还是控制器/逻辑中

从背景和技术角度来看,有哪些方法可以做到这一点?

我的想法是,我需要在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){...}