在AjaxContext中使用_forward

时间:2009-08-10 21:43:10

标签: php zend-framework

我有一个控制器设置,它使用了大量不同的AjaxContent助手。 我对控制器的init()看起来像这样:

$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('index', 'html')
        ->addActionContext('compose', 'html')
        ->addActionContext('sent', 'html')
        ->addActionContext('recipients','html')
        ->addActionContext('inbox', 'html')
        ->addActionContext('sendsuccess','html')
        ->initContext();

在composeAction()结束时,如果满足某个条件,则AJAX请求应转发到sendinguccessAction()。

使用标准的_forward()方法执行此操作似乎不会将其转发为AjaxContent请求 - 页面希望使用标准视图模板进行呈现。

关于如何使用_forward或其他一些重定向方法的任何想法,但将请求作为AJAX请求保留,以便启动正确的操作上下文?

2 个答案:

答案 0 :(得分:2)

基本上发生的事情是,initContext()方法(为ajax响应设置环境)仅针对您的第一个调度操作调用,而不是第二个调度。

围绕这个有很多不同的方法。

首先,要验证这是问题,请尝试调用

$this->_helper->ajaxContext->initContext();
来自sendsuccessAction

。这将强制AjaxContext操作助手再次正确设置viewRenderer。

或者,您可以将$ajaxContext->initContext()方法的调用从init()方法移至控制器的preDispatch()方法。这将导致它在调度每个操作之前运行。

答案 1 :(得分:0)

使用:

$this->_forward("action","controller","module",array('format'=>'html')); # or ajax or json or whatever
相关问题