Zend framework2 如何让Zend Framework 2 beta4中的服务管理器为album表创建实例?
这是Rob Allen关于Zend Framework beta4的快速入门教程 错误消息:Zend\ServiceManager\ServiceManager::get无法获取或创建相册表的实例 它似乎无法尝试连接到数据库,但我还没有找到方法告诉你。它使用闭包从ServiceManager返回一个实例,但会收到上面的错误消息 module/Album/module.php 名称空间相册Zend framework2 如何让Zend Framework 2 beta4中的服务管理器为album表创建实例?,zend-framework2,Zend Framework2,这是Rob Allen关于Zend Framework beta4的快速入门教程 错误消息:Zend\ServiceManager\ServiceManager::get无法获取或创建相册表的实例 它似乎无法尝试连接到数据库,但我还没有找到方法告诉你。它使用闭包从ServiceManager返回一个实例,但会收到上面的错误消息 module/Album/module.php 名称空间相册 class Module { public function getAutoloaderConfig() {
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\Adapter\Adapter作为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;
}
}
config\autoload\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\''
),
),
);
这与Zend Framework的master自Beta 4以来发生了变化有关,因此我的Beta 4目标教程不再适用于最新的ZF master 此外,SM可能有以前的异常,因此您应该检查是否有任何以前的异常,因为这可能显示潜在错误 更新
截至2012年7月11日,my现在更新为Beta 5版。它现在使用Db适配器的ServiceFactory创建适配器,因此您甚至不需要再修改应用程序的模块类。确保main Module.php有一个getServiceConfiguration()引用。我也有同样的问题,忘了把它包括在内 module/Application/module.php:
使用以下行更新composer.json文件
"zendframework/zendframework": "dev-master#18c8e223f070deb07c17543ed938b54542aa0ed8"
运行以下命令,您就可以开始了
php composer.phar self-update
php composer.phar update
php composer.phar install
我将提供的代码添加到module.php中,但没有执行。我将密钥更改为Zend\db\Adapter\Adapter,这导致它执行。但是,我在$config=$config['db']行收到了错误的未定义索引:db;因为$config不包含该键
显然,要将db键加载到$config数组中,还需要额外的代码。这是真的吗?代码是什么,在哪里?My 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,
有相同的问题…您好,w2wDev您是否解决了此问题?如果是,如果您可以共享您的解决方案,则会很有帮助。问题显然存在于$dbAdapter=$sm->get('db-adapter');line@Armand我得到了w2wDev发布的同样的错误。任何建议。My main Module.php引用了您提到的getServiceConfiguration(),但仍然得到相同的错误。任何帮助都将不胜感激