在使用ZF开发网络应用程序时,我有一个哈哈!关于Zend_Controller_Action中_forward方法的时刻。如the Programmer's Reference Guide中所述,在操作中调用_forward方法时,在当前操作完成之前,将不会执行所请求的操作。这引出了一个问题:
除了表单处理之外,您何时会使用_forward操作有意识地确保当前操作在启动另一个操作之前完成(尽管您可能会在操作结束时放置_forward请求)?这有什么明确的例子?使用这种方法与ActionStack相关的任何陷阱或优势?
答案 0 :(得分:4)
_forward()
只是替换Request
对象中的模块/控制器/操作参数。
它只允许在旅途中改变主意(没有其他要求)。
这会产生不同的后果,具体取决于调用它的调度循环状态。执行需要一些时间setDispatched()
。
考虑这些情况:
首先:
$this->_forward('some')
第二
return $this->_forward('some');
第三
$this->someAction();
// ececuted?
第四:
return $this->someAction();
// executed?
答案 1 :(得分:1)
我真的只使用_forward
有两个原因:
我想重定向,但不希望用户的网址发生变化。
我想将一些(非字符串)对象传递给另一个动作。
$this->_forward('index', null, null, array('create_task_form' => $form));
在每种情况下,目标动作都可以独立,没有发起者,通常只是整理显示。
答案 2 :(得分:0)
您何时会使用_forward操作故意确保当前操作在启动另一个
之前完成
在使用_forward()
之前,我认为它不会用于让当前操作完成。这看起来更像是对您的域逻辑(模型,服务等)的调用,而不是处理请求,这就是行动的目的。
yourAction
if(conditionsAreNotMet()) {
return _forward(anotherAction);
}
我认为提供_forward()
是为了在您的行动中提供早期退出点(该逻辑主要关注一件事,例如展示新闻);无需执行其他请求(如_redirect()
),从而增加了对Web服务器的负担。