Model view controller 在Zend框架中是否可以进行手动调度?

Model view controller 在Zend框架中是否可以进行手动调度?,model-view-controller,zend-framework,dispatcher,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->

我想知道如何手动启动并执行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();
$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');
实例化布局没有问题,但在创建控制器时会变得复杂。调用构造函数后设置视图实例不起作用,因为在实例化过程中已经需要该视图

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

问候

格奥尔格·瓦赫特试试:

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

$view引用的是$view的本地实例。将其分配给$controller->view后,$controller->init()和$controller->hinweisAction()对其执行的任何操作都将影响$controller->view,而不是本地$view对象。

请尝试:

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


$view引用的是$view的本地实例。一旦您将其分配给$controller->view,$controller->init()和$controller->hinweisAction()对其执行的任何操作都将影响$controller->view,而不是本地$view对象。

如果您使用的是Zend_应用程序,则只需执行以下操作:

// 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();
$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_应用程序将负责为您设置视图。调用dispatch将处理操作帮助程序,特别是ViewRenderer,它会为您完成所有脏活。

如果您使用的是Zend_应用程序,则只需执行以下操作:

// 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();
$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_应用程序将负责为您设置视图。调用dispatch将处理操作助手,尤其是ViewRenderer,它为您完成所有的脏活。

我建议您查看
Zend\u Test\u PHPUnit\u ControllerTestCase
源代码。它正是针对控制器生成的内容运行测试所需的功能。具体来说,请阅读
bootstrap()
dispatch()
函数。也许你可以一字不差地复制它。

我建议你看看
Zend\u Test\u PHPUnit\u ControllerTestCase
源代码。它正是针对控制器生成的内容运行测试所需的功能。具体来说,请阅读
bootstrap()
dispatch()
函数。也许你可以逐字复制。

谢谢,修复了这个问题。但我认为我的主要问题仍然是,我不知道如何将视图正确地注入控制器。。HMG基于ZF 1.8.0:您说过在实例化过程中需要视图-这是不正确的。构造函数只设置request/response/args/helper并调用init()方法(注意:您不需要自己调用init()。视图是由initView()自动创建的,除非您已经定义了它。就我所见,您正确地定义了视图。视图是否仍然不起作用,或者您只是担心是否正确执行了该操作?谢谢,修复了该问题。但我认为我的主要问题仍然是,我不知道如何将视图正确地注入控制器。。HMG基于ZF 1.8.0:您说过在实例化过程中需要视图-这是不正确的。构造函数只设置request/response/args/helper并调用init()方法(注意:您不需要自己调用init()。视图是由initView()自动创建的,除非您已经定义了它。就我所见,您正确地定义了视图。视图是否仍然不起作用,或者您只是担心是否正确执行了该操作?我想补充一点,您可能还希望获得$response对象的句柄,而不是盲目地输出它。我想补充一点,您可能还希望获得$response对象的句柄,而不是盲目地输出它。