过去几周我一直在关注ZF2,尤其是 Rob Allen's 'Album' example ,我创建了示例DB-'zf2tutorial'和示例table-'album',当我使用php-时,它可以很好地获取所有项目mysql,所以DB中的数据出现问题。
我的local.php看起来像这样 的 CON组fi 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 / album是否有效它会在stackoverlow中抛出这个与this类似的错误。
它抛出的错误是: 其他信息: 的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 Beta 5教程,但仍遇到此问题。如果有人有解决方案,请与我们分享。
由于
答案 0 :(得分:6)
似乎有人忘记更新zf2中的最新更改。
解决方案:
文件模块/ Album / Module.php必须包含以下内容:
<?php
namespace Album;
use Album\Model\AlbumTable;
use Zend\ModuleManager\Feature\ServiceProviderInterface;
class Module implements ServiceProviderInterface
然后你必须重命名
public function getServiceConfig()
到
public function getServiceConfiguration()
答案 1 :(得分:2)
public function getServiceConfiguration()不是正确的函数名
rename getServiceConfiguration() to getServiceConfig()
虽然它不是强制性的,但您应该将类Module声明为
class Module implements ServiceProviderInterface
答案 2 :(得分:1)
我不确定但是尝试将代码放入
con fi 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',
),
),
);
答案 3 :(得分:0)
使用以下代码修改config / autoload / 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',
),
),
);
并且您应该将您的数据库凭据放在config / autoload / local.php中,以便它们不在git存储库中(因为local.php被忽略):
return array(
'db' => array(
'username' => 'YourDBUsername',
'password' => 'YourDBPassword',
),
);
答案 4 :(得分:0)
刚刚遇到同样的问题。
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
类中, PHPUnit配置文件中缺少Cache
模块,但也没有加载:
<强> /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
模块添加到模块列表中。现在它有效。
答案 5 :(得分:0)
问题是在config / autoload / global.php中,该服务名为“Zend \ Db \ Adapter \ Adapter”,而在module / Album / Module.php中,它正在搜索“Zend \ Db \ Adapter”(缺少附加\适配器)。
在module / Album / Module.php中添加缺少的“\ Adapter”,就像这样修复了它。
'AlbumTableGateway' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
答案 6 :(得分:0)
在module/Album/src/Album/Model/Album.php
中,请改为使用:
array('name' => 'striptags'),
array('name' => 'stringtrim'),
请参阅Zend在vendor/zendframework/zendframework/library/Zend/Filter/FilterPluginManager.php
答案 7 :(得分:0)
我在尝试实现代码时遇到了同样的问题,请关注zend教程。主要原因是订单文件夹
<iframe>
在Module.php中的,getConfig(),getAutoloaderConfig()足以运行
<img>
答案 8 :(得分:0)
如果你为不同的模块得到类似的错误,代码似乎正确,那么在composer.json中添加一个条目
“相册”:“module / Album / src /”
在autoload和autoload-dev部分中,其中Album是模块的名称
"autoload": {
"psr-4": {
"Application\\": "module/Application/src/",
"Album\\": "module/Album/src/"
}
},
"autoload-dev": {
"psr-4": {
"ApplicationTest\\": "module/Application/test/",
"Album\\": "module/Album/src/"
}
},
运行“composer update”后重新加载页面。检查错误是否消失。