Php 在模块化Codeigniter中,一个模块';s控制器调用另一个模块';s函数?

Php 在模块化Codeigniter中,一个模块';s控制器调用另一个模块';s函数?,php,codeigniter,module,codeigniter-2,hmvc,Php,Codeigniter,Module,Codeigniter 2,Hmvc,我正在使用wiredesignz提供的带有HMVC扩展的CodeIgniter 我的web应用程序主要处理文本文章。我有一个名为articles的模块。“文章”模块的模型为“文章”\u模型,包含对文章进行数据库更改的函数。例如,以下内容将更新文章: $this->articles_model->update_article(); 用户仪表板还有另一个模块。用户有时会在其仪表板中对文章进行更新。该请求是从仪表板控制器发出的,因为此操作是从仪表板模块内的视图执行的 在这种情况下,我应该

我正在使用wiredesignz提供的带有HMVC扩展的CodeIgniter

我的web应用程序主要处理文本文章。我有一个名为
articles
的模块。“文章”模块的模型为“文章”\u模型,包含对文章进行数据库更改的函数。例如,以下内容将更新文章:

$this->articles_model->update_article();
用户仪表板还有另一个模块。用户有时会在其仪表板中对文章进行更新。该请求是从仪表板控制器发出的,因为此操作是从仪表板模块内的视图执行的

在这种情况下,我应该如何让仪表板控制器与文章模型通信?到目前为止,我遇到的两个选择是:

  • 在articles控制器中创建一个
    update\u article()
    函数。它所做的只是调用同名的
    articles\u model
    函数。让仪表板控制器调用articles controller函数
    update\u article()
    。这样做是因为我读到在模块化设计中,控制器应该是不同模块之间的通信点()。我还遇到过其他一些观点,认为管制员不应该互相交谈。因此我感到困惑

  • 我还可以复制
    仪表板模型中的
    更新文章()
    函数。这样,仪表板控制器只需在自己的模块内调用自己的模型。我的直觉告诉我,这不是一个好办法,因为
    update\u article()
    函数不仅由仪表板控制器调用,还被其他许多控制器调用。这将导致大量重复代码


  • 非常感谢您的建议。

    您可以从模块
    文章
    加载模型
    文章
    ,从另一个模块
    仪表板

    只需在模块的构造函数中加载模型(例如,
    Dashboard
    ),您希望模型可用,如下所示

    function __construct() {
      parent::__construct();
    
      ...
    
      // this is case sensitive, 1st part is the module, 2nd part is the class name
      $this->load->model('articles/Articles');
    }
    

    然后,在控制器中的任何位置(例如,
    仪表板
    ),都可以调用
    $this->articles\u model->update\u article()

    您描述的设置似乎有点混乱,但是
    DRY
    在这里肯定适用。由于设计限制而产生的重复代码是一种严重的设计气味。设置基本上归结为两个模块,每个模块代表系统中的一个实体(文章和用户仪表板)。我如何让他们沟通?这就是我到目前为止所做的,只是为了让事情顺利进行。我想知道这是否符合HMVC设计的正确实践。是的,这确实符合HVMC设计。由于模型嵌套在各自的模块中,因此需要访问不同的模块。