我正在使用CodeIgniter和wiredesignz的HMVC扩展。
我的网络应用程序主要处理文本文章。我有一个模块叫articles
。文章模块的模型articles_model
包含对文章进行数据库更改的函数。例如,以下内容将更新文章:
$this->articles_model->update_article();
用户面板还有另一个模块。用户有时会在他们的面板中对文章进行更新。该请求是由仪表板控制器发出的,因为此操作是从仪表板模块内的视图执行的。
在这种情况下,我应该如何让仪表板控制器与文章模型通信?到目前为止,我遇到的几个选择是:
在文章控制器中生成
update_article()
函数。它所做的只是调用相同名称的articles_model
函数。让仪表板控制器调用物品控制器函数update_article()
。这样做是因为我读到在模块化设计中,控制器应该是不同模块(源)之间的通信点。我也遇到过其他观点,认为管制员永远不应该互相交谈。因此我感到困惑。我还可以在
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();
。