在过去的几周里,我一直在关注ZF2尤其是罗布·艾伦的“相册”例如 ,我创建了例如DB-'zf2tutorial“和示例表'album”,工作正常获取的所有项目,当我使用PHP,MySQL的,这样的问题在数据库中的数据。
我local.php看起来是这样的骗子网络g.autoload / local.php:
return array(
'db' => array
(
'driver' => "Pdo",
'dsn' => "mysql:dbname=zf2tutorial;hostname=localhost",
'username' => "user", //here I added my valid username
'password' => "password", //here I added my valid password
'driver_options' => array
(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"
),
),
);
Module.php **模块/专辑/ Model.php
<?php
namespace Album;
use Album\Model\AlbumTable;
class Module
{
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
public function getServiceConfiguration()
{
return array(
'factories' => array(
'album-table' => function($sm) //also tried this 'Album\Model\AlbumTable' => function($sm)
{
$dbAdapter = $sm->get('db-adapter');//also tried this $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$table = new AlbumTable($dbAdapter);
return $table;
},
),
);
}
}
我只是想检查zf2turorial /专辑是否管用它抛出这个错误,它类似于这个职位在这里stackoverlow。
它被投掷的错误是: 其他信息:Zend的\的ServiceManager \异常\ ServiceNotFoundException的
File:
..\vendor\zendframework\zendframework\library\Zend\ServiceManager\ServiceManager.php:392
Message:
Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for Album\Model\AlbumTable
我按照ZF2贝塔5教程为好,但仍然遇到此问题。 在情况下,如果任何人有一个解决方案,请大家与我们分享。
谢谢
Answer 1:
好像有人已经忘记了更新ZF2的最新变化。
解决方案:
文件模块/专辑/ Module.php必须包含这个内容:
<?php
namespace Album;
use Album\Model\AlbumTable;
use Zend\ModuleManager\Feature\ServiceProviderInterface;
class Module implements ServiceProviderInterface
那么你必须重新命名
public function getServiceConfig()
至
public function getServiceConfiguration()
Answer 2:
公共职能getServiceConfiguration()不正确的函数名
rename getServiceConfiguration() to getServiceConfig()
虽然它不是强制性的,你应该声明类模块
class Module implements ServiceProviderInterface
Answer 3:
我不知道,但尝试把代码放到
CON网络g.autoload / global.php:像这样
return array(
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=kd_tutorial;host=localhost',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
),
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter'
=> 'Zend\Db\Adapter\AdapterServiceFactory',
),
),
);
Answer 4:
修改配置/自动加载/ global.php与下面的代码:
return array(
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=YourDBName;host=localhost',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
),
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter'
=> 'Zend\Db\Adapter\AdapterServiceFactory',
),
),
);
你应该把你的数据库凭据在配置/自动加载/ local.php,使他们不能在git仓库(如local.php被忽略):
return array(
'db' => array(
'username' => 'YourDBUsername',
'password' => 'YourDBPassword',
),
);
如果您想了解更多详情,请参阅链接1或链接2
Answer 5:
刚刚得到了同样的问题。
Zend\ServiceManager\Exception\ServiceNotFoundException: Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for Cache\Model\UniversityStorage
在我的情况下,问题是,这PHPUnit的找不到钥匙Cache\Model\UniversityStorage
在服务管理器(注册表),因为它是在被添加Module
类的Cache
模块和Cache
模块中的PHPUnit的配置文件丢失,还没有被加载:
/module/Application/test/phpunit.config.php
<?php
return array(
'modules' => array(
'Application',
'Cache', // <- was missing
),
'module_listener_options' => array(
'config_glob_paths' => array(
'../../../config/autoload/{,*.}{global,local}.php',
),
'module_paths' => array(
'module',
'vendor',
),
),
);
我已经添加了Cache
模块到模块列表。 现在,它的工作原理。
Answer 6:
问题是,配置/自动加载内/ global.php被命名为“Zend的\ DB \适配器\适配器”,而模块/专辑/ Module.php内有人搜索“的Zend \ DB \适配器”的服务(缺少其他\适配器)。
将缺少“\适配器”模块/专辑/ Module.php内像这样的固定对我来说。
'AlbumTableGateway' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
Answer 7:
在module/Album/src/Album/Model/Album.php
,改用:
array('name' => 'striptags'), array('name' => 'stringtrim'),
看到被Zend创建的上述命名空间在vendor/zendframework/zendframework/library/Zend/Filter/FilterPluginManager.php
Answer 8:
我已经encoutered当试图实现代码遵循Zend的教程同样的问题。 最主要的原因是为了文件夹
module
ModuleX
config
src
ModuleX //may be you forget this one
Controller
Factory
Model
...
view
Module.php
在Module.php,getConfig(),getAutoloaderConfig()是足够运行
class Module implements AutoloaderProviderInterface, ConfigProviderInterface{
public function getAutoloaderConfig(){
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
public function getConfig(){
return include __DIR__ . '/config/module.config.php';
}
Answer 9:
如果您收到类似的错误了不同的模块和代码似乎绝对正确的,然后加入composer.json条目
“相册\”: “模块/专辑/ SRC /”
在这样的自动加载和自动加载-dev的部分,在那里相册是你的模块的名称
"autoload": {
"psr-4": {
"Application\\": "module/Application/src/",
"Album\\": "module/Album/src/"
}
},
"autoload-dev": {
"psr-4": {
"ApplicationTest\\": "module/Application/test/",
"Album\\": "module/Album/src/"
}
},
这种运行“作曲家更新”后重新加载页面。 检查是否错误消失。
文章来源: ServiceNotFoundException in ZendFramework 2, example from Rob Allen