Zend_Controller_Action _forward使用(或滥用)案例

时间:2010-11-17 15:41:42

标签: zend-framework zend-controller zend-controller-router

在使用ZF开发网络应用程序时,我有一个哈哈!关于Zend_Controller_Action中_forward方法的时刻。如the Programmer's Reference Guide中所述,在操作中调用_forward方法时,在当前操作完成之前,将不会执行所请求的操作。这引出了一个问题:

除了表单处理之外,您何时会使用_forward操作有意识地确保当前操作在启动另一个操作之前完成(尽管您可能会在操作结束时放置_forward请求)?这有什么明确的例子?使用这种方法与ActionStack相关的任何陷阱或优势?

3 个答案:

答案 0 :(得分:4)

_forward()只是替换Request对象中的模块/控制器/操作参数。

它只允许在旅途中改变主意(没有其他要求)。

这会产生不同的后果,具体取决于调用它的调度循环状态。执行需要一些时间setDispatched()

考虑这些情况:

首先:

$this->_forward('some')

第二

return $this->_forward('some');

第三

$this->someAction();
// ececuted?

第四:

return $this->someAction();
// executed?

答案 1 :(得分:1)

我真的只使用_forward有两个原因:

  1. 我想重定向,但不希望用户的网址发生变化。

  2. 我想将一些(非字符串)对象传递给另一个动作。

    $this->_forward('index', null, null, array('create_task_form' => $form));

  3. 在每种情况下,目标动作都可以独立,没有发起者,通常只是整理显示。

答案 2 :(得分:0)

  

您何时会使用_forward操作故意确保当前操作在启动另一个

之前完成

在使用_forward()之前,我认为它不会用于让当前操作完成。这看起来更像是对您的域逻辑(模型,服务等)的调用,而不是处理请求,这就是行动的目的。

yourAction
  if(conditionsAreNotMet()) {
     return _forward(anotherAction);
  }

我认为提供_forward()是为了在您的行动中提供早期退出点(该逻辑主要关注一件事,例如展示新闻);无需执行其他请求(如_redirect()),从而增加了对Web服务器的负担。