Zend Framework: как я могу иметь несколько экземпляров Action Helper? - PullRequest
0 голосов
/ 23 марта 2011

Я строю систему виджетов на основе 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 в этом массиве.

Как я могуесть несколько экземпляров одного и того же помощника действий?

Извините за мой английский.

1 Ответ

0 голосов
/ 23 марта 2011

IMO, вспомогательный брокер создан только для этого - иметь только один экземпляр.Я бы либо расширил Broker (что имеет мало смысла), либо создал бы класс, который будет обрабатывать вызовы.

Обновление: Создание помощника действия / вида.Присвойте ему виджеты, а затем используйте их для отображения виджетов.

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

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