【问题标题】:Zend Framework action helpersZend 框架动作助手
【发布时间】:2011-02-28 15:31:51
【问题描述】:

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

  • 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)
    );
}

我也试过这个没有成功(它是在_initActionHelpers之前在Bootstrap.php中定义的):

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

那我做错什么了?!?! PLZ帮助,我绝望了,快要放弃了:)

【问题讨论】:

    标签: php zend-framework action helpers


    【解决方案1】:

    您收到错误是因为您没有为 Action_Helper_* 设置自动加载器

    Resource autoloader

    Helper 代理使用插件加载器根据您为其指定的路径和前缀加载帮助器。这就是为什么 ::getHelper() 可以找到你的助手

    【讨论】:

    • 谢谢你!这正是我想要的,它现在可以通过使用 basePath "APPLICATION_PATH . '/controllers/helpers'" 将 autoloader 命名空间设置为 'Action' 并指定 resourceType Helper 来工作。
    • if($classname = Zend_Controller_Action_HelperBroker::getPluginLoader()->load('Common')) { $helper = new $classname()} 这是加载帮助程序的另一种方式
    【解决方案2】:

    你不需要这样做(所以删除它)

    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 将在目录 /controllers/helpers/ 中查找类名 Action_Helper_Common 并为您创建一个实例并返回它。

    【讨论】:

      【解决方案3】:

      由于某种原因,以下行也不适用于我:

      Zend_Controller_Action_HelperBroker::addHelper( new Action_Helper_Common() );
      

      每次我明确地创建一个新的帮助对象时,我都会不断收到“找不到类”错误。

      这对我有用:

      Zend_Controller_Action_HelperBroker::getHelper('Common');
      

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

      不确定它是否适合你,因为你有一个参数化的构造函数。

      【讨论】:

        猜你喜欢
        • 2011-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 2023-03-18
        • 2011-01-28
        • 2011-05-31
        相关资源
        最近更新 更多