2009-11-26 75 views
0

我想知道如何手動啓動執行我的MVC應用程序的控制器操作。我的目標是使用簡單的include將/ myController/myAction的html輸出集成到另一個php應用程序(typo3)中。我想到手動實例化控制器,視圖和佈局,繞過調度器。可悲的是我無法得到它的工作。我目前的方法如下所示:在Zend Framework中可以手動調度嗎?

// standard bootstrap ... setting up autoloader, database etc. 

$layout = new Zend_Layout(); 
$layout->setLayoutPath(('/application/default/layouts')); 
$layout->setLayout('main'); 
$layout->setContentKey('content'); 

$view = new Zend_View(); 

$controller = new IndexController(new Zend_Controller_Request_Http($currenUrl), new Zend_Controller_Response_Http()); 
$controller->view = $view; 
$controller->init(); 
$controller->hinweisAction(); 

$layout->content = $view->render(); 

echo $layout->render(); 

實例化佈局不成問題,但創建控制器時會變得複雜。在調用構造函數之後設置視圖實例不起作用,因爲在實例化過程中已經需要視圖。

什麼是這種情況下的「正確」方式?也許實現一個簡單的用戶定義調度程序,它使用來自我的預定義的控制器和操作名稱?

電賀

喬治WACHTER

回答

2

如果您使用Zend_Application,所有你需要做的是這樣的:

$application->bootstrap(); 
$request = new Zend_Controller_Request_Http(); 
// Set some parameters for request possibly 
$controller = $controller = new IndexController($request, new Zend_Controller_Response_Http()); 

$controller->dispatch('hinweisAction'); 

Zend_Application將採取設置你的看法對你的照顧。調用調度將關注動作助手,特別是ViewRenderer,它爲您完成所有骯髒的工作。

+0

很好,謝謝! – 2009-11-27 10:02:45

+0

我想補充一點,您可能也想要獲得$ response對象的句柄,而不是盲目地輸出它。 – blockhead 2009-11-27 13:15:36

0

嘗試:

$佈局 - >含量= $控制器 - >視圖 - >渲染();

$ view指的是$ view的本地實例。一旦將其分配給$ controller-> view,$ controller-> init()和$ controller-> hinweisAction()對其執行的任何工作都將影響$ controller-> view,而不是本地$ view對象。

+0

謝謝,修正了這個問題。但我認爲我的主要問題仍然是,我不知道如何正確地將視圖注入到控制器中。hm – 2009-11-26 16:07:39

+0

基於ZF 1.8.0:您說在實例化過程中需要視圖 - 這是不正確的。構造函數只設置request/response/args/helper並調用init()方法(注意:你不需要自己調用init())。該視圖是由initView()自動創建的,除非您已經完成了它的定義。據我所見,你正在定義視圖。該視圖仍然無法正常工作,或者您只是在擔心您是否正確地執行了該操作? – 2009-11-26 16:42:22

2

我建議你看看Zend_Test_PHPUnit_ControllerTestCase的源代碼。它確實需要針對控制器生成的內容運行測試。具體而言,請閱讀bootstrap()dispatch()函數。也許你可以複製這個逐字記錄。

相關問題