Php 扩展codeigniter控制器和独立的业务逻辑

Php 扩展codeigniter控制器和独立的业务逻辑,php,codeigniter,hmvc,Php,Codeigniter,Hmvc,如何在Codeigniter中将业务逻辑与控制器分离。我正在使用带有Phills模板库的HMVC。这是我目前的设置 //Application/core/MY_controller.php class My_controller extends MX_controller { function __construct() { parent::__construct(); } } class dCommerce extends MY_controller { funct

如何在Codeigniter中将业务逻辑与控制器分离。我正在使用带有Phills模板库的HMVC。这是我目前的设置

//Application/core/MY_controller.php

class My_controller extends MX_controller
{
  function __construct()
  {
     parent::__construct();
  }
}

class dCommerce extends MY_controller
{
  function __construct()
  {
     parent::__construct();
     #Some of my code that shares the entire app, ex: login
  }
}
现在在控制器中,我想要这样的东西 //应用程序/controllers/sales_order.php

class Sales_order extends dCommerce extends dSales_Order
{ 
  //dSales_Order have all my core APP logic
}
我知道PHP不可能实现多重继承,但是如何将逻辑与控制器分离呢

Sales\u order
将包含所有基于框架的逻辑(取决于应用程序),例如验证,核心类
dSales\u order
将包含核心应用程序逻辑,例如保存、创建等

样品是这样的

    class dSales_Order
    {
      function save( $sales_order_id , $details )
      {
        //blah blah codes and APP logic, too much of math 
        //and then save to DB, this class will be framework Independed
        //only pure php code 
      }
   }

我怎样才能做到这一点呢?

我很抱歉我的英语不好

我希望你的疑惑是与OOPS和PHP有关的。我不能理解你的全部要求


即使我建议你使用新的PHP概念,即PHP中的or,我也很抱歉我的英语不好

我希望你的疑惑是与OOPS和PHP有关的。我不能理解你的全部要求


即使我建议您使用新的PHP概念,即PHP中的或,好的,我想我理解您现在的处境;在交换了一些意见之后

以下是我认为你应该做的:

  • 建立对象列表(即销售、客户、员工等)
  • 在核心PHP中编写所有这些对象
  • 然后,将框架模型用作控制器和对象之间的附加层
  • 可以将对象文件移动到所需的任何框架
  • 您甚至可以通过RESTAPI一次访问多个框架

希望这能有所帮助。

好吧,我想我明白你现在的处境;在交换了一些意见之后

以下是我认为你应该做的:

  • 建立对象列表(即销售、客户、员工等)
  • 在核心PHP中编写所有这些对象
  • 然后,将框架模型用作控制器和对象之间的附加层
  • 可以将对象文件移动到所需的任何框架
  • 您甚至可以通过RESTAPI一次访问多个框架

希望这能有所帮助。

也许我没有完全理解你。为什么要扩展一个从控制器处理业务逻辑的类?主要原因是我想更改我的框架(但不是现在),控制器类将有框架依赖的代码,但我的核心类将只有纯php代码。例如,在2个框架中,它们将有2种类型的验证类,但我的应用程序逻辑在核心类上仍然相同。此外,它还提供了许多灵活性(至少在CI设置的情况下是这样)。例如,您不能在另一个控制器内调用控制器,那么我如何从控制器外调用控制器逻辑?我过去常常将我的逻辑分离到库中,然后从您的控制器中调用它们以获得所需的功能。另一种似乎是模型规范的方法是将它们用于逻辑和数据库。然后,只需使用灯光控制器将请求传递给模型或库。无论哪种方式,它都将它们与逻辑分离@从技术上讲,它是有效的。。。但我需要他们离开图书馆。仅仅因为核心类与框架无关(例如Codeigniter),实际上,从技术上讲,我可以通过在页面顶部添加一行代码
include(“dSales\u Order”)
来实现这一点。但这不是CI的工作方式:(为什么不构建一个名为dsales\u Order的“Model”类来处理应用程序逻辑(保存、创建等),然后在控制器内创建一个实例(Sales\u Order)。可能我没有完全理解您。为什么要扩展一个从控制器处理业务逻辑的类?主要原因是我想更改我的框架(但不是现在),控制器类将有依赖于框架的代码,但我的核心类将只有纯php代码。例如,在两个框架中,它们将有两种类型的验证类,但我的应用程序逻辑在核心类上仍然相同。此外,它还提供了许多灵活性(至少在CI设置的情况下)例如,您不能在另一个控制器内调用控制器,那么我如何从控制器外调用控制器逻辑?我过去常常将我的逻辑分离到库中,然后从您的控制器中调用它们以获得所需的功能。另一种似乎是模型规范的方法是将它们用于逻辑和数据库。然后使用light控制器将请求传递给模型或库。无论哪种方式,它都会将它们与逻辑分离!@micb技术上是可行的……但我需要它们脱离libs。仅仅因为核心类与框架无关(例如Codeigniter),实际上技术上我可以通过添加一行代码
include来实现这一点(“dSales_Order”)
位于页面顶部。但这不是CI的工作方式:(为什么不构建一个名为dSales_Order的“Model”类来处理应用程序逻辑(保存、创建等)。然后在控制器内创建它的实例(Sales_Order)。是的。这就是我需要的,我正在询问最好的方法。我通常不喜欢CI控制器中的
包括
。此外,我认为扩展CI数据库类并不容易:(更改核心文件夹是错误的,不建议这样做。)是的。这是我需要的,我正在询问最好的方法。我通常不喜欢CI控制器中的
包括
。此外,我认为扩展CI数据库类并不容易:(更改核心文件夹是错误的,不建议这样做