我正在使用Zend Framework构建一个网站,我在调度循环方面遇到了一些麻烦。
通常,Zend Framework URL以这种方式构建:http://www.domain.com/module/controller/action。
在我的网站上,我使用的是自定义动态网址,这些网址是通过自定义方法在调度循环中解析的。因此,在解析之后,这些URL中的每一个都将执行特定控制器和模块的特定操作。
我需要执行一些依赖于解析的模块,控制器和操作的任务。问题是我只能在dispatchLoopShutdown发生时知道解析的模块,控制器和动作。我需要执行的任务将设置一些cookie,这些cookie将对将发送到浏览器的输出进行更改。
但是,此时,视图已经呈现,并且发生dispatchLoopShutdown时设置的cookie不会相应地更改输出。
所以,我的问题是......有没有办法强制再次渲染视图?或者在dispatchLoopShutdown之前知道将执行哪些模块,控制器和操作的方法?我也尝试在postDispatch上完成这个,但结果是一样的!
希望我能正确解释我的问题。
感谢您的帮助。
答案 0 :(得分:0)
这是一个关于Zend Framework序列的好架构。
您可以使用控制器插件在发送之前了解模块,控制器和操作:
<?php
class Custom_Controller_Plugin_CheckRoute extends Zend_Controller_Plugin_Abstract
{
public function preDispatch($request)
{
//Get Request
$controller = $request->controller;
$action = $request->action;
$module = $request->module;
//=> perform actions before dispatch
//Update the Request
$request->setModuleName('default')
->setControllerName('index')
->setActionName('action2');
}
}
?>
答案 1 :(得分:0)
我遇到了同样的问题。它由Zend_Controller_Plugin_ActionStack解决。我在dispatchLoopShutdown中添加了一些实现逻辑的操作。此链接非常有用http://framework.zend.com/manual/1.12/en/zend.controller.plugins.html#zend.controller.plugins.standard.actionstack