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 框架中可以手动调度吗?的主要内容,如果未能解决你的问题,请参考以下文章

手动实现事件总线框架EventBus

zend 框架 2 + 教义 2 安装

PHP:obdc_exec() 在 Zend 模型中静默失败

Zend Framework 表单、装饰器和验证:我应该回到纯 HTML 吗?

Zend 框架有代码生成器吗?

5分钟快速掌握Python定时任务框架的实现