4

在使用 ZF 开发 Web 应用程序时,我有一个哈哈!关于 Zend_Controller_Action 中的 _forward 方法的时刻。如《程序员参考指南》中所述,当在动作中调用 _forward 方法时,在当前动作完成之前不会执行请求的动作。这就引出了一个问题:

除了表单处理(尽管您可能会将 _forward 请求放在操作结束时),您何时会使用 _forward 操作来有意确保在开始另一个操作之前完成当前操作?有哪些明确的例子?与 ActionStack 相比,使用这种方法有什么缺陷或优势吗?

4

3 回答 3

4

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

它只允许在旅途中改变主意(无需其他请求)。

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

考虑这些场景:

第一的:

$this->_forward('some')

第二:

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

第三:

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

第四:

return $this->someAction();
// executed?
于 2010-11-17T19:19:31.440 回答
1

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

  1. 我想重定向但不希望用户的 URL 改变。

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

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

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

于 2010-11-17T22:40:56.510 回答
0

您何时会使用 _forward 操作来有意确保您当前的操作在开始另一个操作之前完成

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

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

我认为_forward()提供了一个在你的行动中的早期退出点(逻辑都集中在一件事上,例如呈现新闻);无需执行另一个请求(如_redirect()),从而为 Web 服务器增加更多负载。

于 2010-11-17T15:57:26.990 回答