从默认模块中的自定义操作助手访问Zend url操作助手

时间:2012-07-25 18:11:38

标签: php zend-framework zend-framework-routing

因此,在使用以下内容访问模块时,使用自定义操作助手中的“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

这个问题的根源是什么?

1 个答案:

答案 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() 是一个   检索您希望配置的助手的好选择。