Zend 框架中可以手动调度吗?
Posted
技术标签:
【中文标题】Zend 框架中可以手动调度吗?【英文标题】:Manual dispatching possible in Zend Framework? 【发布时间】:2009-11-26 15:45:44 【问题描述】:我想知道如何手动开始执行我的 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();
实例化布局没问题,但是创建控制器的时候就变得复杂了。调用构造函数后设置视图实例不起作用,因为在实例化过程中已经需要视图。
对于这种情况,“正确”的方法是什么?也许实现一个简单的用户定义调度程序,它使用我预定义的控制器和动作名称?
问候
乔治·瓦赫特
【问题讨论】:
【参考方案1】:如果您使用 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,它会为你完成所有的脏活。
【讨论】:
我想补充一点,您可能还想获得 $response 对象的句柄,而不是盲目地输出它。【参考方案2】:我建议您查看Zend_Test_PHPUnit_ControllerTestCase
源代码。它完全符合您对控制器生成的内容运行测试所需的功能。具体来说,阅读bootstrap()
和dispatch()
函数。也许您可以逐字复制。
【讨论】:
【参考方案3】:试试:
$layout->内容= $controller->view->render();
$view 指的是 $view 的本地实例。一旦将它分配给 $controller->view,$controller->init() 和 $controller->hinweisAction() 对其所做的任何工作都会影响 $controller->view,而不是本地 $view 对象。
【讨论】:
谢谢,已解决。但我认为我的主要问题仍然是我不知道如何将视图正确注入控制器.. hm 基于 ZF 1.8.0:您说在实例化过程中需要视图 - 这是不正确的。构造函数只设置request/response/args/helper,调用init()方法(注意:不需要自己调用init())。该视图由 initView() 自动创建,除非您已经定义了它,您已经完成了。据我所知,您正确定义了视图。视图仍然不起作用,还是您只是担心您是否正确执行此操作?以上是关于Zend 框架中可以手动调度吗?的主要内容,如果未能解决你的问题,请参考以下文章
PHP:obdc_exec() 在 Zend 模型中静默失败