1

一直在扯我的头发为什么这不起作用。尝试注册一个控制器动作助手,例如在 Zend 文档、这里的几篇文章和各种博客中找到的。在 application.ini 和 Bootstrap 中都进行了尝试。

助手本身驻留在 APPLICATION_PATH 中。“/控制器/助手”。该文件本身称为 Scopeing.php。在 application.ini 中,appnamespace = ""。

<?php
class Helper_Scoping extends Zend_Controller_Action_Helper_Abstract
{
    public function direct()
    {
       // code is here
    }
 }

首先我在application.ini中尝试过:

resources.frontController.actionhelperpaths.Helper = APPLICATION_PATH "/controllers/helpers"
resources.frontController.plugins.Scoping = "Helper_Scoping"

在我的控制器中调用以下内容会引发异常并显示消息:“Action Helper by name Scoping not found”:

$this->_helper->Scoping();

然后我在我的 Bootstrap 中尝试了以下操作(根据我看到的其他示例,我尝试了“Helper”和“Helper_”):

protected function _initActionHelpers()
{
    Zend_Controller_Action_HelperBroker::addPath(
            APPLICATION_PATH . '/controllers/helpers', 
            'Helper_'
    );
    Zend_Controller_Action_HelperBroker::addHelper(
        new Helper_Scoping()
    );
}

这次我得到一个未捕获的异常,但同样的想法:“致命错误:在第 116 行的 /Users/ppjd/Sites/dbos/application/Bootstrap.php 中找不到类 'Helper_Scoping'”

由于那里有很多工作示例,我认为我一定错过了一些愚蠢的东西。请求救。

4

2 回答 2

0

我不尝试这个,但我认为你的助手类(在你的应用程序结构中:APPLICATION_PATH 。“/controllers/helpers)应该是'Zend_Controller_Action_Helper_Scoping'而不是'Helper_Scoping'。

于 2012-11-11T10:20:18.477 回答
0

如果有人遇到这种情况,这就是最终对我有用的方法:这是一个命名空间问题。在 Bootstrap 中,我在 addHelper 之前做了这个修改:

    $rl = $this->getResourceLoader();
    $rl->addResourceTypes(array(
        // ...other namespace settings...
        'helper' => array(
                'path'      => 'controllers/helpers',
                'namespace' => 'Helper',
        ),
    ));

之后一切正常。希望这对其他人有帮助。

[有时我觉得我花更多的时间来尝试完善框架,而不是实际的应用程序开发。]

于 2012-11-13T17:29:39.170 回答