在另一个控制器内调用控制器 - CodeIgniter

时间:2013-12-02 08:01:02

标签: codeigniter codeigniter-2

我需要在管理控制器内调用一个控制器说'faq_view'作为URL结构admin / faq_view,这样我怎么能这样做?

例如:

site.com/maincontroller/function

site.com/maincontroller/othercontroller/function

3 个答案:

答案 0 :(得分:4)

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

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

因此,如果您说要在另一个控制器中调用控制器,那么这意味着您将要重定向到另一个页面。

更新回答:

假设new_function maincontroller othercontrollerothercontroller调用该函数。不需要在routes.php上定义该函数。 在$routes['maincontroller/new_function'] = 'othercontroller/new_function'; 上添加以下行。

othercontroller

现在,您可以将maincontroller/new_function的功能称为{{1}}。

答案 1 :(得分:2)

您可以随时在另一个控制器内调用控制器,但这仅适用于我尝试过调用一个控制器。假设您正在尝试在控制器内加载控制器。你可以试试这个:

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

然后这样做:

    $this->myothercontroller->function_name();

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

答案 2 :(得分:1)

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

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

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

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