这是罗布·艾伦对Zend框架BETA4快速入门教程。
错误消息:Zend的\的ServiceManager \的ServiceManager :: GET无法获取或创建相册表实例
好像它没有试图使该数据库的连接,但我还没有找到方法来告诉。 它使用了闭从返回的ServiceManager的实例,但得到上面的错误消息。
模块/专辑/ Module.php
命名空间相册;
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()
{
$albumTable = array(
'factories' => array(
'album-table' => function($sm) {
$dbAdapter = $sm->get('db-adapter');
$table = new AlbumTable($dbAdapter);
return $table;
},
),
);
return $albumTable;
}
}
命名空间应用;
使用Zend的\ DB \适配器\适配器作为将对DBAdapter,
class Module
{
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
public function getServiceConfiguration()
{
$factoryDBAdaptor = array(
'factories' => array(
'db-adapter' => function($sm) {
$config = $sm->get('config');
$config = $config['db'];
$dbAdapter = new DbAdapter($config);
return $dbAdapter;
},
),
);
return $factoryDBAdaptor;
}
}
配置\自动加载\ global.php
return array(
'db' => array(
'driver' => 'PDO',
'dsn' => 'mysql:dbname=zf2tutorial;hostname=localhost',
'username' => 'user',
'password' => 'password',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
),
);
它涉及到一个事实,即自Beta 4的等我测试4针对性的教程不再与最新的ZF大师的作品Zend Framework的主人发生了变化。
此外,SM可能以前有过例外,所以你应该检查是否有任何先前异常作为可能会显示潜在的错误。
更新
截至2012年7月11日,我的教程 ,现在更新的测试版5,它现在使用数据库适配器的服务工厂,以创建适配器,所以你甚至不需要修改应用程序的模块级了。
确保主Module.php具有参考的getServiceConfiguration()。 我有同样的问题,已经忘了把它列入。
模块/应用/ Module.php:
<?php
namespace Application;
use Zend\Db\Adapter\Adapter as DbAdapter;
class Module
{
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
public function getServiceConfiguration()
{
return array(
'factories' => array(
'db-adapter' => function($sm) {
$config = $sm->get('config');
$config = $config['db'];
$dbAdapter = new DbAdapter($config);
return $dbAdapter;
},
),
);
}
}
更新以下行的composer.json文件。
"zendframework/zendframework": "dev-master#18c8e223f070deb07c17543ed938b54542aa0ed8"
运行下面的命令,你会好到哪里去。
php composer.phar self-update
php composer.phar update
php composer.phar install
我加了提供给module.php的代码,并没有执行。 我改变了关键的Zend \ DB \适配器\适配器,导致了它的执行。 但是,我已收到错误未定义指数:分贝线$配置= $配置[“分贝”]; 因为$配置不包含密钥。
它似乎很明显,我认为有必要额外的代码加载分贝钥匙插入$配置阵列。 真的吗? 和代码会在哪里呢? 我module.php是:
<?php
namespace Album;
use Album\Model\Album;
use Album\Model\AlbumTable;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;
use Zend\ModuleManager\Feature\ServiceProviderInterface;
use Zend\Db\Adapter\Adapter as DbAdapter;
class Module implements ServiceProviderInterface {
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';
}
// Add this method:
public function getServiceConfig() {
return array(
'factories' => array(
'Zend\db\Adapter\Adapter' => function($sm) {
echo PHP_EOL . "SM db-adapter executed." . PHP_EOL;
$config = $sm->get('config');
$config = $config['db'];
$dbAdapter = new DbAdapter($config);
return $dbAdapter;
},
'Album\Model\AlbumTable' => function($sm) {
echo PHP_EOL . "SM AlbumTable executed." . PHP_EOL;
$tableGateway = $sm->get('AlbumTableGateway');
$table = new AlbumTable($tableGateway);
return $table;
},
'AlbumTableGateway' => function ($sm) {
echo PHP_EOL . "SM AlbumTableGateway executed." . PHP_EOL;
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Album());
return new TableGateway('album', $dbAdapter, null, $resultSetPrototype);
},
),
);
}
}
?>
通过禁用工具栏修正这个错误。 刚去config/autoload/zend-developer-tools.local-development
和工具栏设置为false。
'toolbar' => [
/**
* Enables or disables the Toolbar.
*
* Expects: bool
* Default: false
*/
'enabled' => false,
文章来源: How do I get the Service Manager in Zend Framework 2 beta4 to create an instance for album-table?