【问题标题】:extending codeigniter controllers and separate business logic扩展 codeigniter 控制器和独立的业务逻辑
【发布时间】:2013-12-02 10:10:03
【问题描述】:

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

//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
  }
}

现在在控制器中我想要这样的东西 //Application/controllers/sales_order.php

class Sales_order extends dCommerce extends dSales_Order
{ 
  //dSales_Order have all my core APP logic
}

我知道 PHP 无法实现多重继承,但是如何将逻辑与控制器分离?

Sales_order 将包含我所有基于框架的逻辑(取决于应用程序)ex、验证和核心类 dSales_Order 将具有核心应用程序逻辑 ex。保存、创建等

一个样本应该是这样的......

    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 
      }
   }

我怎样才能做到这一点?

【问题讨论】:

  • 也许我没有完全理解你。为什么要扩展一个从控制器处理业务逻辑的类?
  • 主要原因是我想改变我的框架(但不是现在),控制器类将有框架依赖的代码,但我的核心类只有纯php代码。前任。在 2 个框架中,它们将有 2 种类型的验证类,但我的 APP 逻辑在核心类上仍然相同。它还提供了许多灵活性(至少在 CI 设置的情况下)例如。你不能在另一个控制器内部调用控制器,那么我如何从控制器外部调用控制器逻辑?
  • 我过去常常将我的逻辑分离到库中,然后从您的控制器中调用它们以获得所需的功能。另一种似乎是模型规范的方法是将它们用于逻辑和数据库。然后只需将请求传递给模型或库的灯光控制器。无论哪种方式,它都将它们与逻辑分开!
  • @micb 从技术上讲它可以工作......但我需要它们来自库。仅仅因为核心类与框架无关(例如 Codeigniter),事实上我可以通过在页面顶部添加一行代码include("dSales_Order") 来做到这一点。但它不是 CI 做事的方式 :(
  • 为什么不构建一个名为 dsales_Order 的“模型”类来处理您的应用程序逻辑(保存、创建等)。然后在控制器 (Sales_Order) 中创建它的一个实例。

标签: php codeigniter hmvc


【解决方案1】:

对不起,我的英语不好。

我希望您的疑问与 OOPS 和 PHP 有关。我无法理解您的全部要求。

即使我建议您使用 PHP 中称为 traitsinterfaces 的新 PHP 概念

【讨论】:

    【解决方案2】:

    好的,我想我明白你现在来自哪里了;换了几个cmets之后。

    我认为你应该这样做:

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

    希望这会有所帮助。

    【讨论】:

    • 是的。这就是我需要的,我在问最好的方法来做到这一点。我通常讨厌 CI 控制器中的 includes。另外我认为扩展 CI 数据库类并不容易:(
    • 改core文件夹是错误的,不推荐
    猜你喜欢
    • 2010-12-15
    • 2017-08-08
    • 2010-11-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 2019-06-21
    • 1970-01-01
    相关资源
    最近更新 更多