【问题标题】:Accessing Zend url action helper from a custom action helper in default module从默认模块中的自定义操作帮助程序访问 Zend url 操作帮助程序
【发布时间】:2012-07-25 18:11:38
【问题描述】:

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

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

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

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

这个问题的根源是什么?

【问题讨论】:

  • 我不确定您是否提供了足够的信息来解决问题。您如何配置 ZF 应用程序?配置是什么样的?它只是一个 URL,还是问题发生在默认模块的其他地方?它是否也发生在其他模块中?您收到的异常是否还说明 HelperBroker 正在查看哪些文件夹?

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


【解决方案1】:

通常,如果我想在控制器或动作助手的上下文之外使用 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 帮助程序尚未在插件加载器中注册,它将为您注册并加载它。

来自The Helper Broker Documentation

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

【讨论】:

  • 感谢您的帮助。我尝试了 getHelper,但仍然有一个致命错误。最终工作的是 getStaticHelper,如果它还不存在,它会实例化帮助器。
  • 我刚刚根据您的发现更新了答案。看起来 getHelper 会为您注册它,但没有。我从文档中添加了一个参考,它解释了 getStaticHelper 将如何为您实例化它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多