我正在构建一个基于Action Helper的小部件系统。每个小部件处理段响应以修改渲染视图。 但是,我遇到了问题。 小部件在preDispatch中调用Controller插件,如下所示:
// $widgets : list of widget to call
foreach($widgets as $segment =>$widget) {
Zend_Controller_Action_HelperBroker::addHelper(
new $widget($segment));
}
这个很糟糕。但如果我有两次相同的小部件调用,小部件将只调用一次。 示例:
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 :(得分:0)
IMO帮助代理就是为了这个 - 只有一个实例。我要么扩展Broker(这没什么意义),要么创建一个处理调用的类。
<强>更新强> 制作一个动作/视图助手。为其分配小部件,然后使用它来回显小部件。
// controller
foreach ($this->_helper->widget->getWidgets() as $widget) {
$widget->setVariablesToView();
}
//view
$this->widget()->getWidget('widgetName'); //view params already set