【问题标题】:Zend Controller Action Helper Problem not able to add helperZend 控制器动作助手问题无法添加助手
【发布时间】:2011-01-02 21:51:49
【问题描述】:

尝试使用 preDispatch 方法使控制器助手在某些控制器中具有类似的功能。

错误:

Fatal error: Class 'Helper_Action_Test' not found in /var/www/zend.dev/application/Bootstrap.php on line 9`

应用布局

/Application
 /Helpers
   **/Actions** this is where i will save the classes
   /Views
 /modules
 /configs
 /layouts
 /Bootstrap.php

在我添加的 Bootstrap 中:

protected function _initActionHelpers(){
  Zend_Controller_Action_HelperBroker::addHelper(new Helper_Action_Test());
}

在我的帮助文件中:

class Helper_Action_Test extends Zend_Controller_Action_Helper_Abstract{

    public function  preDispatch() {
       echo 'Test';
    }

}

当我在引导程序中执行此操作时,它可以工作,它可能与包含或我尝试使用 addHelper() 实例化新类的方式有关;

    include(APPLICATION_PATH.'/helpers/action/Test.php');
    Zend_Controller_Action_HelperBroker::addHelper(new Test());

有什么想法吗?

【问题讨论】:

    标签: zend-framework


    【解决方案1】:

    试试这个:

    // Action Helpers
    Zend_Controller_Action_HelperBroker::addPath(
        APPLICATION_PATH .'/controllers/helpers');
    $hooks = Zend_Controller_Action_HelperBroker::getStaticHelper('Quote');
    Zend_Controller_Action_HelperBroker::addHelper($hooks);
    

    【讨论】:

      【解决方案2】:

      你必须包含我认为的辅助文件引导文件。

      或者我想你想:require_once()

      【讨论】:

        【解决方案3】:

        通过在配置文件中添加以下行,您将能够实现您想要的

        ; Include path
        includePaths.library                = APPLICATION_PATH "/../library"
        
        ; Autoloader Namespace
        autoloaderNamespaces[]              = 'Helper_'
        

        ZF 官方文档Autoloader中的更多信息

        【讨论】:

        • 您好杰夫,感谢您的回复。这是否需要我将 Helpers 文件夹放入 library 文件夹中?
        • 这样,是的,你必须把你的助手放在库文件夹中。如果你想使用默认方式存储你的助手,你应该命名你的类 Zend_View_Helper_HelperName 并扩展 Zend_View_Helper_Abstract 并在其中有一个名为 HelperName() 的公共方法,可以从视图中使用 $this->helperName() 调用
        • 这些是动作助手,我必须扩展 Zend_Controller_Action_Helper_Abstract,以获得所有动作控制器的东西..
        • 如果这些助手对所有应用程序都是通用的,您只需将助手存储在库文件夹中。如果它特定于一个应用程序,最好的位置是在您的应用程序文件夹内。
        【解决方案4】:

        要解决您的问题,请确保引导程序上的 _initAutoload() 是第一种方法,并确保您已添加前缀路径:

        Zend_Controller_Action_HelperBroker::addPrefix('Helper_Action');
        

        如果类不在 include_path 上,您也可以提供类的路径:

        Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH . '/helper/action/', 'Helper_Action');
        

        【讨论】:

        • 您好 Kenye,试过了,还是报错,找不到类。我还将该方法移到了 _initAutoload 方法下面。当我尝试从任何地方实例化 Helper_Action_Test() 时,它仍然找不到它...包括路径不起作用,因为我想它。还有其他想法吗?
        • 发布您的整个引导程序和配置,以便我们重现您的环境。
        • 刚刚注意到该粘贴的第 17 行应该如下但它仍然不起作用.. Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH . '/helpers/action/', 'Helper_Action');
        猜你喜欢
        • 2011-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多