2011-01-10 28 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(); 
    } 
}