0

我想知道如何手动开始执行我的 MVC 应用程序的控制器操作。我的目标是使用简单的包含将 /myController/myAction 的 html 输出集成到另一个 php 应用程序(typo3)中。我想过手动实例化控制器、视图和布局,以绕过调度程序。可悲的是我无法让它工作。我目前的方法如下所示:

// 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();

实例化布局没问题,但是创建控制器的时候就变得复杂了。在调用构造函数后设置视图实例不起作用,因为在实例化期间已经需要视图。

对于这种情况,什么是“正确”的方式?也许实现一个简单的用户定义调度程序,它使用我预定义的控制器和动作名称?

问候

格奥尔格·瓦赫特

4

3 回答 3

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 将负责为您设置视图。调用 dispatch 会处理 Action Helpers,尤其是 ViewRenderer,它会为你完成所有的脏活。

于 2009-11-26T22:28:48.590 回答
2

我建议您查看Zend_Test_PHPUnit_ControllerTestCase源代码。它完全符合您对控制器生成的内容运行测试所需的功能。具体来说,阅读bootstrap()dispatch()函数。也许您可以逐字复制。

于 2009-11-27T07:23:45.140 回答
0

尝试:

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

$view 指的是 $view 的本地实例。一旦将它分配给 $controller->view,$controller->init() 和 $controller->hinweisAction() 对其所做的任何工作都会影响 $controller->view,而不是本地 $view 对象。

于 2009-11-26T15:54:59.787 回答