代码之家  ›  专栏  ›  技术社区  ›  Fatmuemoo

Zend_控制器操作转发使用(或滥用)案例

  •  4
  • Fatmuemoo  · 技术社区  · 14 年前

    在使用ZF开发web应用程序时,我哈哈大笑!关于Zend_控制器动作中的前向方法的力矩。如所述 the Programmer's Reference Guide ,当在操作中调用_forward方法时,在当前操作完成之前,将不会执行请求的操作。这就引出了一个问题:

    除了表单处理之外,您何时使用“转发”操作有意确保当前操作在启动另一个操作之前完成(尽管您可能会将“转发”请求放在操作的末尾)?有哪些明确的例子?将这种方法用于ActionStack有什么缺陷或好处吗?

    3 回复  |  直到 14 年前
        1
  •  4
  •   takeshin    14 年前

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

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

    这有不同的结果,取决于调用它的调度循环状态。一些时间 setDispatched() 需要执行。

    考虑这些场景:

    第一:

    $this->_forward('some')
    

    第二:

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

    第三:

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

    第四:

    return $this->someAction();
    // executed?
    
        2
  •  1
  •   Derek Illchuk    14 年前

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

    1. 我想重定向,但不想更改用户的URL。

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

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

    在每种情况下,目标操作都可以独立运行,而不需要发起方,通常只是封送显示。

        3
  •  0
  •   chelmertz user1604064    14 年前

    何时使用“转发”操作来有意确保在启动另一个操作之前完成当前操作

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

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

    我想 _前进() 提供一个 行动中的早期退出点 (哪种逻辑都集中在一件事上,例如呈现新闻);不需要 执行另一个请求 (就像 _redirect() )从而增加了web服务器的负载。

    推荐文章