这个问题我折腾了好几天,但还是没找到问题所在。
以下是我在application.config.php中的配置段:// Initial configuration with which to seed the ServiceManager.
// Should be compatible with ZendServiceManagerConfig.
'service_manager' => array(
'abstract_factories' => array(
'ZendLogLoggerAbstractServiceFactory',
'ZendCacheServiceStorageCacheAbstractServiceFactory',
)
),
'log' => array(
'LogApp' => array(
'writers' => array(
array(
'name' => 'stream',
'priority' => 1000,
'options' => array(
'stream' => 'data/logs/app.log'
)
)
)
)
)
,我尝试在我的控制器中获取服务实例:
$logger = $this->getServiceLocator()->get('Log\App');
和抛出异常:
An error occurred
An error occurred during execution; please try again later.
Additional information:
ZendServiceManagerExceptionServiceNotFoundException
File:
/var/openresty/html/skeleton-zf2/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:529
Message:
ZendServiceManagerServiceManager::get was unable to fetch or create an instance for LogApp
感谢您的帮助ocramius
我将段移动到module.config.php,这次它抛出了异常:
ZendServiceManagerExceptionServiceNotCreatedException
File:
/var/openresty/html/skeleton-zf2/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:1070
Message:
An abstract factory could not create an instance of applicationweb(alias: ApplicationWeb).
在IRC上讨论过,这里的问题有两个:
- 您拥有此配置的文件是
config/application.config.php
(这是不是模块/合并配置,而是将其放入服务"ApplicationConfig"
) 由于异常,抽象工厂无法实例化服务。为了调试异常,您可以执行如下操作:
try {
// ...
$logger = $this->getServiceLocator()->get('Log\App');
// ...
} catch (Exception $e) {
do {
var_dump($e->getMessage());
} while ($e = $e->getPrevious());
}
最有可能的是,您的配置有一个错误的文件路径,必须由日志编写者访问,这将通过跟踪这些异常出现,就像我刚才展示的那样。