Zend framework2 ZendFramework 2中的ServiceNotFoundException,来自Rob Allen的示例
在过去的几周里,我特别关注ZF2,我创建了示例数据库-“zf2tutorial”和示例表-“album”,当我使用php mysql时,它可以很好地获取所有项目,因此数据库中的数据存在问题 我的local.php如下所示 config.autoload/local.php:Zend framework2 ZendFramework 2中的ServiceNotFoundException,来自Rob Allen的示例,zend-framework2,Zend Framework2,在过去的几周里,我特别关注ZF2,我创建了示例数据库-“zf2tutorial”和示例表-“album”,当我使用php mysql时,它可以很好地获取所有项目,因此数据库中的数据存在问题 我的local.php如下所示 config.autoload/local.php: return array( 'db' => array ( 'driver' => "Pdo", 'dsn' => "m
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
**module/Album/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;
},
),
);
}
}
我也学习了ZF2 Beta 5教程,但仍然遇到这个问题。如果有人有解决方案,请与我们分享
谢谢似乎有人忘记了更新zf2的最新更改 解决方案: 文件module/Album/module.php必须包含以下内容:
<?php
namespace Album;
use Album\Model\AlbumTable;
use Zend\ModuleManager\Feature\ServiceProviderInterface;
class Module implements ServiceProviderInterface
到
我不确定,但尝试将代码放入 config.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',
),
),
);
公用函数getServiceConfiguration()不是正确的函数名
rename getServiceConfiguration() to getServiceConfig()
虽然不是强制性的,但是您应该将类模块声明为
class Module implements ServiceProviderInterface
使用以下代码修改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):
如果您想了解更多详细信息,请参阅或刚刚收到相同的问题
Zend\ServiceManager\Exception\ServiceNotFoundException: Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for Cache\Model\UniversityStorage
在我的例子中,问题是,PHPUnit在服务管理器(注册表)中找不到键Cache\Model\UniversityStorage
,因为它被添加到Cache
模块的Module
类中,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',
),
),
);
问题在于,在config/autoload/global.php中,服务名为“Zend\Db\Adapter\Adapter”,而在module/Album/module.php中,它正在搜索“Zend\Db\Adapter”(缺少其他\Adapter)
像这样在module/Album/module.php中添加缺少的“\Adapter”为我修复了它
'AlbumTableGateway' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
在module/Album/src/Album/Model/Album.php
中,改用:
array('name'=>'striptags'),
数组('name'=>'stringtrim'),
请参见Zend在vendor/zendframework/zendframework/library/Zend/Filter/FilterPluginManager.php上创建的上述名称空间
我在尝试按照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';
}
如果您在不同的模块中遇到类似的错误,并且代码似乎正确,那么在composer.json中添加一个条目
“相册\:“模块/相册/src/”
在像这样的自动加载和自动加载开发部分,其中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”并重新加载页面。检查错误是否消失。Zend已将所有配置标准化为配置getServiceConfig()
确实正确!将框架文件更新为最新的主文件,即RC2,您不应该在其中找到任何配置:)我正在努力解决同一问题,并尝试以两种方式获取配置,包括将一个函数作为别名来调用另一个函数,但这没有帮助。添加use.Using getServiceConfig()也不是我的解决方案!现在ZF 2.1.3已经发布,因此getServiceConfig()
是正确的。它只需要ServiceProviderInterface
行。通过这样做,我得到了这个错误致命错误:Class Album\Module包含1个抽象方法,因此必须声明为抽象或实现其余方法(Zend\ModuleManager\Feature\ServiceProviderInterface::getServiceConfig)在第54行的D:\projects\zf2 tutorial\module\Album\module.php中,您是否找到了解决方案?我目前正为这个完全相同的问题而挣扎。@BrianKessler你找到了我仍然无法解决的解决方案了吗?(我今天在同一个教程中遇到了同样的问题。对我来说,将db和service_manager字典[教程要求我们在global.php中添加它们]移动到我的模块(Album/config)中module.config.php解决了这个问题。我正在努力解决这个问题,并且在我的global.php中已经有了这个代码;它似乎没有任何帮助。在这种情况下,我会说试试这个。我正在努力解决这个问题,并试图以两种方式获得配置,包括将一个函数作为别名来调用另一个函数,但它没有帮助。或者添加工具的id。
'AlbumTableGateway' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
module
ModuleX
config
src
ModuleX //may be you forget this one
Controller
Factory
Model
...
view
Module.php
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';
}
"autoload": {
"psr-4": {
"Application\\": "module/Application/src/",
"Album\\": "module/Album/src/"
}
},
"autoload-dev": {
"psr-4": {
"ApplicationTest\\": "module/Application/test/",
"Album\\": "module/Album/src/"
}
},