【问题标题】:Call controller within another controller - CodeIgniter在另一个控制器中调用控制器 - CodeIgniter
【发布时间】:2025-12-23 03:15:06
【问题描述】:

我需要在 admin 控制器中调用一个控制器,比如 'faq_view' 作为 URL 结构 admin/faq_view 像这样我该怎么做?

例如:

site.com/maincontroller/function

site.com/maincontroller/othercontroller/function

【问题讨论】:

标签: codeigniter codeigniter-2


【解决方案1】:

然后,只需重定向页面。否则,如果您只想调用该函数,请通过 AJAX 调用它。

这取决于你到底想做什么。如果您只想调用该函数,那不是正确的方法。控制器定义为它自己控制按顺序出现的页面流。控制器负责向其关联的视图发送命令以更改视图对模型的表示。

所以,如果你说你想在另一个控制器中调用控制器,那应该意味着你即将重定向到另一个页面。

更新答案:

假设您在maincontroller 上有new_function,它从othercontroller 调用函数。该函数不需要在othercontroller 上定义。 在routes.php 上添加以下行。

$routes['maincontroller/new_function'] = 'othercontroller/new_function';

现在,您可以将othercontroller 的函数调用为maincontroller/new_function

【讨论】:

  • 这样做的真正目的是我有模块,应该在 admin/ 下调用,即:admin/faq,admin/user。我知道使用路线的一种方法可以做到这一点。但是我真的很想通过admin/调用那些子模块可以吗?
【解决方案2】:

您始终可以在另一个控制器中调用一个控制器,但这仅适用于调用一个控制器,只要我尝试过。假设您正在尝试在控制器中加载控制器。你可以试试这个:

    $this->load->library('../controllers/myothercontroller');

然后这样做:

    $this->myothercontroller->function_name();

就是这样!您现在可以访问当前控制器中 myothercontroller(控制器)中的任何功能。我希望这也有帮助。

【讨论】:

  • 这个只能调用一次。如果你尝试调用另一个控制器,你会得到一个Undefined property
  • @machineaddict,这是否意味着我在这里用我的代码做不好的做法?如果是,那么请告诉我怎样才能做得更好。谢谢
  • 一个控制器不应该在另一个控制器中被调用,这不是 MVC 的工作方式。但是,HMVC 是一个更好的选择,您可以这样做。但是,如果您不想将 HMVC 安装到 Codeigniter,这是一个快捷方式,如果您在每个控制器中只使用一次,这是一个很好的快捷方式。
【解决方案3】:

您的控制器是表示层的一部分,不应包含应用程序逻辑。这意味着您永远不需要从另一个控制器调用控制器,而是重构您的应用程序并将域逻辑移动到模型层。

现在,如果您有多个控制器中需要的方法,例如,您需要一个模板方法来自动添加页眉和页脚视图。

如果是这种情况,请创建一个您的控制器扩展的基类。

如果您只是在谈论路由问题,那么只需使用路由文件即可。我不喜欢 CI 自动路由,应该避免使用它,因为它会导致同一资源的 URL 重复。

【讨论】:

    最近更新 更多