2011-01-10 63 views

回答

1

out-ethics?任何......回到现实。

是的,控制器可以调用另一个控制器的动作。例如,在CakePHP中,这个功能是通过requestAction

// pass uri to request action and receive vars back 
$ot3 = $this->requestAction('/stories/xenu'); 

如果你滚你自己提供,如何实现它的细节将是非常具体到你的框架。

+0

感谢您的回复。我很可能会将CakePHP中的函数requestAction复制到我自己的公司Intranet项目中...我会考虑的。谢啦。 – Vegetus 2011-01-10 20:15:58

0

然后你需要修改框架,找到控制器被放置的位置,并在那里添加你的第二个控制器。

你正在使用什么框架?

+0

我没有使用任何框架。我使用MVC方法创建了自己的项目。 – Vegetus 2011-01-10 20:05:13

0

你可以用任何你想做的方式。如果你不想使用MVC,你不必使用MVC。但是,在MVC中,您一次只能有一个控制器处于活动状态。您可能需要多个视图或模型,而不是另一个控制器。在加载网站的菜单和页脚的页眉和页脚视图时,没有任何错误。

+0

是的,在我自己的Intranet项目中,需要控制许多模型和许多视图。但刚才我观察到他需要另一个控制器来处理一些你想要的信息......谢谢! – Vegetus 2011-01-10 20:21:29

1

我相信你可以用你使用的任何框架来做你想做的事情。如果无论出于何种原因都无法在本地执行此操作,则可以根据需要扩展您的框架。

话虽如此,我个人不喜欢控制器调用另一个控制器的想法。如果仅仅从理论角度来看,它似乎有点打破了MVC范式。我可能会做的是构建一个库类,它包含所需的功能,然后让两个控制器将该类实例化为成员并调用所需的函数。

例如,使用笨:

库/ MyLib.php:

class MyLib 
{ 
    public function MyFunc() 
    { /* do whatever */ } 
} 

控制器/ ControllerA.php:

class ControllerA extends Controller 
{ 
    public function index() 
    { 
     $this->load->library('MyLib'); 
     $this->mylib->MyFunc(); 
    } 
} 

控制器/ ControllerB:

class ControllerB extends Controller 
{ 
    public function index() 
    { 
     $this->load->library('MyLib'); 
     $this->mylib->MyFunc(); 
    } 
} 
相关问题