2010-10-17 51 views
0

我发现此代码here,同时试图了解什么是动作堆,以及为什么它们应该如此糟糕。我认为动作堆只是一种动作助手(就像flashmessenger或重定向器或ViewRenderer一样)。如何在没有操作步骤的情况下做到这一点

但无论如何,有没有人明白这段代码的作用以及如何在没有动作堆的情况下做同样的事情?

class MyController_Action extends Zend_Controller_Action { 
    function init() { 
     /** you might not want to add to the stack if it's a XmlHttpRequest */ 
     if(!$this->getRequest()->isXmlHttpRequest()) { 
      $this->_helper->actionStack('left', 'somecontroller', 'somemodule'); 
      $this->_helper->actionStack('center', 'somecontroller', 'somemodule'); 
      $this->_helper->actionStack('right', 'somecontroller', 'somemodule'); 
     } 
} 

class MyController extends MyController_Action { 
    function indexAction() { 
     // do something 
    } 
} 

class SomecontrollerController extends MyController_Action { 
    function leftAction() { 
     // do something 

     $this->_helper->viewRenderer->setResponseSegment('left_container'); 
    } 

    function centerAction() { 
     // do something 

     $this->_helper->viewRenderer->setResponseSegment('center_container'); 
    } 

    function rightAction() { 
     // do something 

     $this->_helper->viewRenderer->setResponseSegment('right_container'); 
    } 
} 

回答

3

我将动作实现为重新usalbe部件(动作佣工preDispatch()方法),如下所述:

Using Action Helpers To Implement Re-Usable Widgets - phly, boy, phly

小部件可能导致输出到placeholder视图助手,因此可以在布局中的任何地方使用

它们也可以将内容呈现为其他placeholder,例如边栏,如手册中所述:

protected function _initSidebar() 
    { 
     $this->bootstrap('View'); 
     $view = $this->getResource('View'); 

     $view->placeholder('sidebar') 
      // "prefix" -> markup to emit once before all items in collection 
      ->setPrefix("<div class=\"sidebar\">\n <div class=\"block\">\n") 
      // "separator" -> markup to emit between items in a collection 
      ->setSeparator("</div>\n <div class=\"block\">\n") 
      // "postfix" -> markup to emit once after all items in a collection 
      ->setPostfix("</div>\n</div>"); 
    } 

另一解决方案是使用视图助手,其中访问模型数据,并在布局运行它们。

+0

另一篇关于项目负责人实用ZF的文章 – 2010-10-18 16:46:34

相关问题