Php 在模块化Codeigniter中,一个模块';s控制器调用另一个模块';s函数?
我正在使用wiredesignz提供的带有HMVC扩展的CodeIgniter 我的web应用程序主要处理文本文章。我有一个名为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(); 用户仪表板还有另一个模块。用户有时会在其仪表板中对文章进行更新。该请求是从仪表板控制器发出的,因为此操作是从仪表板模块内的视图执行的 在这种情况下,我应该
articles
的模块。“文章”模块的模型为“文章”\u模型,包含对文章进行数据库更改的函数。例如,以下内容将更新文章:
$this->articles_model->update_article();
用户仪表板还有另一个模块。用户有时会在其仪表板中对文章进行更新。该请求是从仪表板控制器发出的,因为此操作是从仪表板模块内的视图执行的
在这种情况下,我应该如何让仪表板控制器与文章模型通信?到目前为止,我遇到的两个选择是:
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设计。由于模型嵌套在各自的模块中,因此需要访问不同的模块。