我需要在管理控制器内调用一个控制器说'faq_view'作为URL结构admin / faq_view,这样我怎么能这样做?
例如:
site.com/maincontroller/function
site.com/maincontroller/othercontroller/function
答案 0 :(得分:4)
然后,只需重定向页面即可。否则,如果您只想调用该函数,请通过AJAX调用它。
这取决于你究竟想做什么。如果您只想调用该函数,则不是正确的方法。控制器,因为它定义自己控制顺序页面的流量。 Controller负责将命令发送到其关联的视图,以更改视图的模型表示。
因此,如果您说要在另一个控制器中调用控制器,那么这意味着您将要重定向到另一个页面。
更新回答:
假设new_function
maincontroller
othercontroller
从othercontroller
调用该函数。不需要在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。