首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让Zend Framework2 beta4中的服务管理器为相册表创建一个实例?

如何让Zend Framework2 beta4中的服务管理器为相册表创建一个实例?
EN

Stack Overflow用户
提问于 2012-07-06 10:36:40
回答 5查看 10.7K关注 0票数 4

这是Rob Allen的Zend Framework beta4快速入门教程。

错误Message:Zend\ServiceManager\ServiceManager::get无法获取或创建相册表的实例

它似乎尝试连接到数据库失败,但我还没有找到方法来判断。它使用闭包从ServiceManager返回一个实例,但得到了上面的错误消息。

模块/相册/Module.php

命名空间相册;

代码语言:javascript
运行
复制
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,

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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\''
        ),
    ),
);
EN

回答 5

Stack Overflow用户

发布于 2012-07-06 19:39:48

这与Zend框架的主版从Beta 4开始更改的事实有关,因此我的针对beta 4的教程不再适用于最新的ZF主版。

此外,SM可能有以前的异常,因此您应该检查是否有任何以前的异常,因为这可能会显示潜在的错误。

更新

从2012年7月11日起,我的应用程序已经针对Beta5进行了更新,它现在使用Db适配器的ServiceFactory来创建适配器,因此您甚至不再需要修改tutorial的模块类。

票数 2
EN

Stack Overflow用户

发布于 2012-07-06 21:30:23

确保主Module.php有一个引用getServiceConfiguration()。我也有同样的问题,但忘了把它包括进去。

module/Application/Module.php:

代码语言:javascript
运行
复制
<?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;
                },
            ),
        );
    }
}
票数 0
EN

Stack Overflow用户

发布于 2012-07-24 21:07:18

使用以下行更新您的composer.json文件。

代码语言:javascript
运行
复制
"zendframework/zendframework": "dev-master#18c8e223f070deb07c17543ed938b54542aa0ed8"

运行下面的命令,你就可以运行了。

代码语言:javascript
运行
复制
php composer.phar self-update  
php composer.phar update
php composer.phar install
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11355126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档