4

我有一个 Zend Framework 应用程序,它为我的公司提供了一个自定义库。我在自定义库下创建的资源在我们的开发环境中的 Windows 中加载得很好。我今天早上刚试图把它移到一个 linux 机器上,我收到以下错误:

Fatal error: Uncaught exception 'Zend_Application_Bootstrap_Exception' with message 'Resource matching "errorLogger" not found' in /home/nick/Repos/myfirstzend.com/includes/library/Zend/Application/Bootstrap/BootstrapAbstract.php on line 694

我在我的引导程序的构造函数中设置了我的插件路径,如下所示:

$this->setOptions(array(
            'pluginPaths' => array('Company_Application_Resource' => 'Company/Application/Resource')
));

然后我尝试传递以下数组(在引导程序中的不同 _init 方法中):

$resources['errorLogger'] = array(
                'stream' => array(
                    'writerName' => 'db',
                    'writerParams' => array(
                        'db' => array(
                            'dbname' => APPLICATION_PATH . '/logs/errorLog.sqlite'
                        )
                    )
                )
            );

到以下方法:

$this->registerPluginResource($resourceName, $resourceOptions);

$resourceName该初始数组的键('errorLogger')在哪里,并且是该键$resourceOptions处的数组。

我有ErrorLogger.phplibrary/Company/Application/Resource/班级名称是class Company_Application_Resource_ErrorLogger extends Zend_Application_Resource_Log.

我不知所措。有人看到我做错了什么吗?

我可以做一系列 var_dumps 来解决这个问题吗?我在这里不知所措。

编辑:引导代码

4

2 回答 2

0

尝试使用 Xdebug 以及可以让您以交互方式调试它的东西(例如 Eclipse PDT)来逐步解决问题区域。这应该让您了解为什么事情会出错。

没有转储你所有的库代码,这似乎是我能想出的唯一答案。

另外,我会尝试重命名资源。如果我记得,Zend 对该名称的资源有疑问。

于 2012-10-18T00:42:41.773 回答
-1

您确定您使用了正确的路径吗?我认为您应该使用带有 APPLICATION_PATH 变量的绝对路径构建。如果 ../ 包含在相对于 APPLICATION_PATH 的路径中,请使用 realpath 函数

此外,我会给你一些我使用的关于自动加载器的代码,也许它会有所帮助。

    /**
 * Register namespace App_
 * @return Zend_Application_Module_Autoloader
 */
protected function _initAutoload() {
    $autoloader = new Zend_Application_Module_Autoloader ( array ('namespace' => 'App_', 'basePath' => APPLICATION_PATH ) );
    return $autoloader;
}

如果您的库位于默认路径之外的其他包含路径中,则可以在 application.ini 和命名空间中添加自定义库包含路径,如下所示。

includePaths.library = APPLICATION_PATH "/../../www_company_library"
autoloaderNamespaces[] = 'Company';
于 2012-10-16T22:27:03.007 回答