php - 在 Modular Codeigniter 中,一个模块的 Controller 如何/应该如何调用另一个模块的函数?

标签 php codeigniter module codeigniter-2 hmvc

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

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

$this->articles_model->update_article();

用户仪表板还有另一个模块。用户有时会从他们的仪表板中更新文章。该请求是从仪表板 Controller 发出的,因为此操作是从仪表板模块内的 View 执行的。

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

  1. 在文章 Controller 中创建一个update_article() 函数。它所做的只是调用同名的 articles_model 函数。让仪表板 Controller 调用文章 Controller 函数 update_article()。这样做是因为我读过在模块化设计中, Controller 应该是不同模块之间的通信点(source)。我也遇到过其他意见,认为 Controller 永远不应该互相交谈。因此我很困惑。

  2. 我还可以在 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/

相关文章:

如果用户名存在,PHP 返回值

php - anahkiasen/用于 Lumen/(Laravel 微框架)的前表单生成器库

php - 如何在 CodeIgniter 4 中访问 Stripe

django - 将 API 从 CodeIgniter 迁移到 Django 的最佳方法

Perl:如何在多个独立脚本之间共享大量模块的导入?

module - 模块中的意外赋值语句

PHP 正则表达式 - 匹配所有内容但不完全匹配一个或多个单词

php - SQL 变量插入 INSIDE mysql_query

php - CodeIgniter 更新数据库

python - 我的自定义模块没有出现在我的 openerp 7 安装中