2011-02-28 110 views
1

我是Zend框架动作助手中的新手,我试图用它们没有成功(我读了一堆关于动作助手的帖子,其中包括http://devzone.zend.com/article/3350,并且在8小时内没有找到任何解决方案) 。我使用Zend Tool来设置我的项目,助手的名字是Action_Helper_Common。无论我做什么,我都会收到以下错误“致命错误:未找到类'Action_Helper_Common'”。目前,我有事情设置是这样的:Zend框架动作助手

  • ZF版本:1.11.3
  • 助手名:Action_Helper_Common
  • 助手的位置: /application/controllers/helpers/Common.php

在bootstrap.php中我有以下功能:

protected function _initActionHelpers() { 
    Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH . '/controllers/helpers', 'Action_Helper'); 
    Zend_Controller_Action_HelperBroker::addHelper(
     new Action_Helper_Common(null, $session) 
    ); 
} 

我也试过这个机智豪特成功(这是在bootstrap.php中定义_initActionHelpers前):

protected function _initAutoloader() { 
    $moduleLoader = new Zend_Application_Module_Autoloader(array(
     'namespace' => '', 
     'basePath' => APPLICATION_PATH . '/controllers/helpers')); 
    return $moduleLoader; 
} 

所以我在做什么错?!?! PLZ帮助,我很绝望,打算放弃:)

回答

0

,因为你还没有安装自动加载的Action_Helper_ *

Resource autoloader

助手经纪人使用的插件加载器加载基于路径和指定给它的前缀佣工你有错误。这就是为什么:: getHelper()可以找到你的帮手

+0

谢谢你!这正是我想要的,现在通过使用basePath“APPLICATION_PATH。”/ controllers/helpers'“将autoloader命名空间设置为'Action'并指定resourceType Helper,可以工作。 –

+0

'if($ classname = Zend_Controller_Action_HelperBroker :: getPluginLoader() - > load('Common')){$ helper = new $ classname()}' 这是另一种方法来加载你的帮手 – Xerkus

0

你不需要做的(因此将其删除)

Zend_Controller_Action_HelperBroker::addHelper(
     new Action_Helper_Common(null, $session) 
    ); , 

,因为你已经做了

Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH . '/controllers/helpers', 'Action_Helper'); 

时,你会做

$myhelper = $this->getHelper('Common'); 

在您的控制器中zf将lookinto目录/ controllers/helpers /用于类名称Action_Helper_Commo n并为您创建一个实例并将其返回。

0

出于某种原因,以下行并没有为我工作,以及:

Zend_Controller_Action_HelperBroker::addHelper(new Action_Helper_Common()); 

我只是不停的每个我创建一个新的辅助对象明确时间得到一个“类未找到”的错误。

这对我来说是什么在起作用:

Zend_Controller_Action_HelperBroker::getHelper('Common'); 

在这种情况下,新Action_Helper_Common对象被创建并与Helper Broker注册。

不知道如果它适合你,因为你有一个参数化的构造函数。