Bootstrap资源加载在linux和windows中不同

时间:2012-08-23 14:13:31

标签: php zend-framework

我有一个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.php下有library/Company/Application/Resource/,类名是class Company_Application_Resource_ErrorLogger extends Zend_Application_Resource_Log

我很茫然。有人看到我做错了吗?

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

修改:Bootstrap code

2 个答案:

答案 0 :(得分:0)

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

没有倾销所有的库代码,这似乎是我能想到的唯一答案。

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

答案 1 :(得分:-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';