2

因此,在访问模块时,我通常使用自定义操作帮助程序中的“url”操作帮助程序没有问题,使用以下命令:

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

但是如果访问默认模块(根url,/)会出现以下错误:

致命错误:在 /home/erahhal/Code/ZendFramework-1.11.12/library/Zend/Controller/Plugin/Broker.php 中,未捕获的异常 'Zend_Controller_Action_Exception' 带有消息 'Action helper "Url" has not been registered with the helper broker'在第 336 行

这个问题的根源是什么?

4

1 回答 1

2

通常,如果我想在控制器或动作助手的上下文之外使用 URL 助手,我只需自己创建一个新的助手实例。

您应该能够使用以下代码获取 URL 帮助程序并使用它:

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

我不确定您为什么会遇到该错误,但如果帮助程序尚未在前端控制器中注册(也许您在应用程序调度中过早调用它?),请尝试使用getStaticHelper()而不是getExistingHelper()

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

如果 URL 帮助程序尚未在插件加载器中注册,它将为您注册并加载它。

来自Helper Broker 文档

还有两种静态方法可以从助手代理中检索助手:getExistingHelper()getStaticHelper(). getExistingHelper()仅当先前已由助手代理调用或显式注册时才会检索助手;如果没有,它会抛出异常。getStaticHelper()与 相同 getExistingHelper(),但如果尚未在帮助程序堆栈中注册,将尝试实例化帮助程序。getStaticHelper()是检索您希望配置的助手的好选择。

于 2012-07-25T21:34:40.530 回答