因此,在使用以下内容访问模块时,使用自定义操作助手中的“url”操作助手通常没有问题:
$urlHelper = Zend_Controller_Action_HelperBroker::getExistingHelper('url');
但是如果访问默认模块(根URL,/),则会出现以下错误:
致命错误:带有消息'Action helper'的未捕获异常'Zend_Controller_Action_Exception'Url“尚未在/home/erahhal/Code/ZendFramework-1.11.12/library/Zend/Controller/Plugin/中向助手经纪人注册第336行的Broker.php
这个问题的根源是什么?
答案 0 :(得分:2)
通常,如果我想在控制器或动作帮助器的上下文之外使用URL帮助器,我只是自己创建一个帮助器的新实例。
您应该能够使用以下代码获取URL帮助程序并使用它:
$urlHelper = new Zend_Controller_Action_Helper_Url();
$url = $urlHelper->url(array('controller' => 'foo',
'action' => 'bar',
'module' => 'mod'));
我不确定你为什么会遇到这个错误,但是如果帮助器还没有在Front Controller中注册(也许你在应用程序调度中过早地调用了它?),请尝试使用{{1}而不是getStaticHelper()
:
getExistingHelper()
如果URL助手尚未在插件加载器中注册,它将为您注册并加载它。
来自The Helper Broker Documentation:
还有两种静态方法可以从中检索帮助程序 帮助经纪人:
$urlHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('url');
和getExistingHelper()
。getStaticHelper()
只有先前有帮助才会检索帮助程序 由助手经纪人调用或明确注册;它 如果没有,将抛出异常。getExistingHelper()
与此相同getStaticHelper()
,但会尝试实例化帮助器 尚未在帮助堆栈中注册。getExistingHelper()
是一个 检索您希望配置的助手的好选择。