Zend Framework:我如何拥有Action Helper的多个实例?

时间:2011-03-23 12:09:57

标签: zend-framework action helper

我正在构建一个基于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的多个实例?

抱歉我的英文。

1 个答案:

答案 0 :(得分:0)

IMO帮助代理就是为了这个 - 只有一个实例。我要么扩展Broker(这没什么意义),要么创建一个处理调用的类。

<强>更新 制作一个动作/视图助手。为其分配小部件,然后使用它来回显小部件。

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

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