我有一个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。
答案 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';