可以在Zend Framework中手动调度吗?

时间:2009-11-26 15:45:45

标签: model-view-controller zend-framework dispatcher

我想知道如何手动开始执行我的MVC应用程序的控制器操作。我的目标是使用简单的include将/ 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();

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

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

迎接

GeorgWächter

3 个答案:

答案 0 :(得分: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将负责为您设置视图。调用调度将负责Action Helpers,尤其是为您完成所有脏工作的ViewRenderer。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

尝试:

  

$ layout-> content =   $控制器 - >视图 - >渲染();

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