2011-03-23 36 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

相關問題