Доступ к помощнику действия Zend url из помощника настраиваемого действия в модуле по умолчанию

Так что обычно у меня нет проблем с использованием помощника действия "url" из помощника настраиваемого действия при доступе к модулю, используя следующее:

$urlHelper = Zend_Controller_Action_HelperBroker::getExistingHelper('url');

Но следующая ошибка возникает, если осуществляется доступ к модулю по умолчанию (корневой URL, /):

Неустранимая ошибка: неперехваченное исключение «Zend_Controller_Action_Exception» с сообщением «Помощник действия« URL »не был зарегистрирован у вспомогательного брокера» в /home/erahhal/Code/ZendFramework-1.11.12/library/Zend/Controller/Plugin/Broker.php по строке 336

В чем корень этой проблемы?


person colordrops    schedule 25.07.2012    source источник
comment
Я не уверен, что вы предоставили достаточно информации для решения проблемы. Как вы настраиваете приложение ZF? Как выглядят конфиги? Это всего лишь один URL-адрес или проблема возникает где-то еще в вашем модуле по умолчанию? В других модулях тоже бывает? Сообщает ли полученное вами исключение, какие папки ищет HelperBroker?   -  person curtisdf    schedule 25.07.2012


Ответы (1)


Часто, если я хочу использовать помощник URL вне контекста контроллера или помощника действия, я просто сам создаю новый экземпляр помощника.

Вы должны иметь возможность использовать следующий код, чтобы получить вспомогательный URL-адрес и использовать его:

$urlHelper = new Zend_Controller_Action_Helper_Url();
$url       = $urlHelper->url(array('controller' => 'foo',
                                   'action'     => 'bar',
                                   'module'     => 'mod'));

Я не уверен, почему вы столкнулись с этой ошибкой, но если помощник еще не зарегистрирован во Front Controller (возможно, вы вызываете это слишком рано в отправке приложения?), Попробуйте использовать getStaticHelper() вместо getExistingHelper():

$urlHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('url');

Если вспомогательный URL-адрес еще не зарегистрирован в загрузчике плагинов, он зарегистрирует и загрузит его за вас.

Из документации Helper Broker :

Также есть два статических метода для получения помощников от вспомогательного брокера: getExistingHelper() и getStaticHelper(). getExistingHelper() будет извлекать помощника только в том случае, если он был ранее вызван или явно зарегистрирован посредником помощника; в противном случае будет сгенерировано исключение. getStaticHelper() делает то же самое, что и getExistingHelper(), но будет пытаться создать экземпляр помощника, если он еще не был зарегистрирован в стеке помощника. getStaticHelper() - хороший выбор для получения помощников, которые вы хотите настроить.

person drew010    schedule 25.07.2012
comment
Спасибо за помощь. Я попробовал getHelper, но все равно произошла фатальная ошибка. В итоге заработал getStaticHelper, который создает экземпляр помощника, если он еще не существует. - person colordrops; 27.07.2012
comment
Я только что обновил ответ на основе вашего вывода. Похоже, getHelper зарегистрирует его для вас, но этого не произошло. Я добавил ссылку из документации, в которой объясняется, как getStaticHelper создаст его для вас, как вы нашли. - person drew010; 27.07.2012