Php 操作助手包含错误+;getActionController为空

Php 操作助手包含错误+;getActionController为空,php,zend-framework,Php,Zend Framework,我想写一些动作助手,但似乎我做得不好 首先,在我的引导文件中,我正在执行以下操作: Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH.'/controllers/helpers/My/Helper/', 'My_Helper'); 在此目录中,我有以下目录树: My/Helper/ - Fileupload/ - Abstract.php - Xhr.php - Fileupload.php 在

我想写一些动作助手,但似乎我做得不好

首先,在我的引导文件中,我正在执行以下操作:

Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH.'/controllers/helpers/My/Helper/', 'My_Helper');
在此目录中,我有以下目录树:

My/Helper/
  - Fileupload/
    - Abstract.php
    - Xhr.php
  - Fileupload.php
在我的控制器中,我成功调用fileupload助手(在my_helper_fileupload类中):

但是在这个助手的构造函数中,我尝试获取另一个助手(在My_helper_Fileupload_Xhr类中)iwth:

这导致了我的错误

找不到名为FileuploadXhr的操作帮助程序

我做错了什么?我试了很多东西,但我不知道怎么了


此外,经过几次测试后,似乎在fileupload助手的构造函数中,当调用getActionController方法时,我得到了NULL。它不是应该自动设置的吗?

助手代理将删除下划线,作为“规范化”您给它的助手名称过程的一部分。它只处理CamelCased helper名称,因此您的
Fileupload\u Xhr
将转换为
FileuploadXhr

Zend_加载程序最终负责查找和加载正确的PHP文件,它使用下划线来确定何时应该添加目录分隔符

如果将这两件事结合起来,实际的结果是,在action helper代理的任何路径下都不能有嵌套的文件夹结构。对于使用
addPath
添加的任何路径,您希望能够加载的所有帮助器类必须位于给定路径的正下方,并且没有中间的子文件夹


简单的解决方案是将助手从
My/helper/Fileupload/Xhr.php
移动到
My/helper/FileuploadXhr.php

,假设您使用
My
作为应用程序名称空间-这是我通常做的<代码>应用程序太长,无法键入-这是一种方法

在引导中:

Zend_Controller_Action_HelperBroker::addPath(应用程序路径)。/controllers/helpers、'My_Controller_Helper')

将助手类命名为
My\u Controller\u helper\u SomeHelper
,并将其存储在文件
application/controllers/helpers/SomeHelper.php

使用以下命令在控制器中调用:

$this->\u helper->someHelper()


如果您的appnamespace不同,只需用您的appnamespace替换
My\ucode>。

您在这里提出了两个不同的问题。您提供了更多关于路径和加载问题的详细信息,我回答了这个问题。最好将你的第二个问题从这个问题中编辑出来,并将其作为一个完整的问题发布,附带更多信息。
$res = $this->_helper->fileupload($directory);
Zend_Controller_Action_HelperBroker::getStaticHelper('Fileupload_Xhr');