我正在使用 CodeIgniter 和 wiredesignz 的 HMVC 扩展。
我的网络应用程序主要处理文本文章。我有一个名为 articles
的模块。文章模块的模型 articles_model
包含对文章进行数据库更改的函数。例如,以下将更新文章:
$this->articles_model->update_article();
用户仪表板还有另一个模块。用户有时会从他们的仪表板中更新文章。该请求是从仪表板 Controller 发出的,因为此操作是从仪表板模块内的 View 执行的。
在这种情况下,我应该如何让仪表板 Controller 与文章模型进行通信?到目前为止我遇到的几个选项是:
在文章 Controller 中创建一个
update_article()
函数。它所做的只是调用同名的articles_model
函数。让仪表板 Controller 调用文章 Controller 函数update_article()
。这样做是因为我读过在模块化设计中, Controller 应该是不同模块之间的通信点(source)。我也遇到过其他意见,认为 Controller 永远不应该互相交谈。因此我很困惑。我还可以在
dashboard_model
中复制update_article()
函数。这样仪表板 Controller 将只需要在它自己的模块中调用它自己的模型。我的直觉告诉我这不是要走的路,因为update_article()
函数不仅被仪表板 Controller 调用,而且还有很多其他 Controller 调用。这将导致大量重复代码。
如有任何建议,我们将不胜感激。
最佳答案
您可以从另一个模块 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');
}
然后在 Controller 的任何位置(例如 Dashboard
),您可以调用 $this->articles_model->update_article();
。
关于php - 在 Modular Codeigniter 中,一个模块的 Controller 如何/应该如何调用另一个模块的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12336103/