0

我正在使用 Zend Framework 构建网站,但调度循环遇到了一些问题。

通常,Zend Framework URL 是这样构建的:http://www.domain.com/module/controller/action

在我的网站上,我使用了自定义的动态 URL,这些动态 URL 通过自定义方法在调度循环上进行解析。因此,这些 URL 中的每一个在被解析后,都会执行特定控制器和模块的特定操作。

我需要执行一些依赖于解析的模块、控制器和操作的任务。问题是我只能在 dispatchLoopShutdown 发生时知道解析的模块、控制器和操作。我需要执行的任务将设置一些 cookie,这些 cookie 将对发送到浏览器的输出进行更改。

但是,此时视图已经被渲染,并且在 dispatchLoopShutdown 发生时设置的 cookie 不会相应地改变输出。

所以,我的问题是......有没有办法强制再次渲染视图?或者知道在 dispatchLoopShutdown 之前将执行什么模块、控制器和动作的方法?我也尝试在 postDispatch 上完成此操作,但结果是一样的!

希望我能正确解释我的问题。

谢谢您的帮助。

4

2 回答 2

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');
    }
}
?>
于 2011-02-25T23:04:21.373 回答
0

我有同样的问题。Zend_Controller_Plugin_ActionStack 解决了这个问题。我在从 dispatchLoopShutdown 实现逻辑的地方添加了一些操作。这个链接很有用http://framework.zend.com/manual/1.12/en/zend.controller.plugins.html#zend.controller.plugins.standard.actionstack

于 2015-04-05T15:24:23.123 回答