在模块化代码点火器中,一个模块的控制器如何/应该调用另一个模块的功能?



我正在使用CodeIgniter和wiredesignz的HMVC扩展。

我的网络应用程序主要处理文本文章。我有一个模块叫articles。文章模块的模型articles_model包含对文章进行数据库更改的函数。例如,以下内容将更新文章:

$this->articles_model->update_article();

用户面板还有另一个模块。用户有时会在他们的面板中对文章进行更新。该请求是由仪表板控制器发出的,因为此操作是从仪表板模块内的视图执行的。

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

  1. 在文章控制器中生成update_article()函数。它所做的只是调用相同名称的articles_model函数。让仪表板控制器调用物品控制器函数update_article()。这样做是因为我读到在模块化设计中,控制器应该是不同模块(源)之间的通信点。我也遇到过其他观点,认为管制员永远不应该互相交谈。因此我感到困惑。

  2. 我还可以在dashboard_model中复制update_article()函数。这样,仪表板控制器将只需要在自己的模块中调用自己的模型。我的直觉告诉我这不是路,因为update_article()函数不仅由仪表板控制器调用,还由许多其他控制器调用。这将导致大量重复的代码。

欢迎提出任何建议。

您可以从另一个模块Dashboard从模块articles加载模型articles

只需在模块的构造函数(例如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');
}

然后,在控制器中的任何位置(例如Dashboard),都可以调用$this->articles_model->update_article();

最新更新