2011-03-23 37 views
0

我正在构建一个基于Action Helper的小部件系统。每个小部件处理段响应以修改渲染视图。 但是,我有一个问题。 的小部件调用一个控制器插件,在preDispatch,就像这样:Zend Framework:我如何拥有一个Action Helper的多个实例?

// $widgets : list of widget to call 
foreach($widgets as $segment =>$widget) { 
Zend_Controller_Action_HelperBroker::addHelper(
new $widget($segment)); 
} 

这worsk罚款。但是,如果我有两次相同的窗口小部件调用,那么窗口小部件只会调用一次。 例子:

Zend_Controller_Action_HelperBroker::addHelper(
new Menu_Widget($segment=’menu’), 
new Menu_Widget($segment =’right’), 
); 

如果我做了转储检查堆栈:

Zend_Debug::dump(Zend_Controller_Action_HelperBroker::getStack()); 

我能看到的只是一个时间Menu_Widget这个数组英寸

我怎样才能拥有同一个Action Helper的多个实例?

对不起,我的英语。

+0

这也许[链接](http://weierophinney.net/matthew/archives/246-Using-Action-Helpers-To-Implement-Re-Usable-Widgets.html)会给你一些信息。 – Marcin 2011-03-23 12:20:37

回答

0

海事组织的帮手经纪人只是为了 - 只有一个实例。我要么扩大经纪人(这没有多大意义),要么创建一个能够处理呼叫的类。

更新: 做一个行动/视图助手。为其分配小部件,然后用它来回显小部件。

// controller 
foreach ($this->_helper->widget->getWidgets() as $widget) { 
    $widget->setVariablesToView(); 
} 

//view 
$this->widget()->getWidget('widgetName'); //view params already set 
+0

好的,我有一个很大的问题:(你说“创建一个班级”,但我不知道如何处理这个班的电话。 – anardil 2011-03-23 13:29:48

相关问题