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

发布于 2024-10-25 21:04:35 字数 680 浏览 5 评论 0原文

我正在构建一个基于 Action Helper 的小部件系统。每个小部件处理分段响应以修改渲染视图。 但是,我有一个问题。 小部件在 preDispatch 中调用控制器插件,如下所示:

// $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 的多个实例?

对不起我的英语。

I’m building a widget system based on Action Helper. Each widget deal with the segment response to modify the render view.
But , I’ve got a problem.
The widgets are calling in a Controller Plugin, in the preDispatch, like this :

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

That’s worsk fine. But if I’ve got a same widget call twice, the widget will be calling just one time.
Example :

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

If I do a dump to check the stack :

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

I can see just one time Menu_Widget in this array.

How can I have multiple instance of a same Action Helper?

Sorry for my english.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

说谎友 2024-11-01 21:04:35

在我看来,助手经纪人就是为此而设计的——只有一个实例。我要么扩展代理(这没什么意义),要么创建一个类来处理调用。

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

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

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

IMO the helper broker is made just for that - to have only one instance. I would either extend the Broker (which makes little sense) or create a class that will handle the calls.

Update:
Make a action/view helper. Assign widgets to it and then use it to echo the widgets.

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

//view
$this->widget()->getWidget('widgetName'); //view params already set
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文