Zend框架2 - DI和必须注入表适配器到表.乏味


Zend Framework 2 - DI and having to inject table adapter into tables... tedious?

我刚刚阅读了Rob Allen的akrabat ZF2教程(http://akrabat.com/wp-content/uploads/Getting-Started-with-Zend-Framework-2.pdf),关于如何将依赖项注入到您的东西中,例如将表适配器注入到表类中。

这似乎是我应该怎么做:

        array(
            'Application'Model'DbTable'UserTable',
        ) => array(
            'parameters' => array(
                'config' => 'Zend'Db'Adapter'PdoMysql',
            )
        ),
        array(
            'Application'Model'DbTable'UserProfileTable',
        ) => array(
            'parameters' => array(
                'config' => 'Zend'Db'Adapter'PdoMysql',
            )
        ),

好,这很酷,但我有大约84个表,所以我将不得不添加每一个表,并说我希望PdoMySQL注入到他们所有。是否有任何适当的方法来做到这一点,如指定我的整个DbTable文件夹?

        array(
            'Application'Model'DbTable'UserTable',
            'Application'Model'DbTable'UserProfileTable'
        ) => array(
            'parameters' => array(
                'config' => 'Zend'Db'Adapter'PdoMysql',
            )
        ),

还有人这样做并找到更好的解决方案吗?

谢谢,Dom

你的问题很好,我同意,这是一个依赖注入没有意义的场景。我还没有浏览过ZF2 API,它们是否完全放弃了在连接级别而不是表级别绑定适配器的能力?

在我的数据库类,我使用一个yaml文件来存储连接设置;用户名、密码、适配器等。我这样做的格式可以直接传递给Zend_Config,然后可以传递给Zend_Db类。

// Entry in connection.yml
database:
  adapter: Pdo_Mysql
  params:
    host:     myhost
    dbname:   mydatabase
    username: myusername
    password: mypassword
// Parse yaml file to get above snippet in an array ($dbConnectionparams)
$config = new Zend_Config($dbConnectionParams);
$dbo = Zend_Db::factory($config->database);

现在,如果我需要更改数据库连接的适配器,我只需要在一个位置更改它,即连接。yml文件。

而且,我相信您可以将这种类型的连接数据存储为各种其他格式(xml等)。

你应该在你的模型类中实现Zend'Db'Adapter'AdapterAwareInterface,并通过控制器中的服务管理器请求它们。请查看我的博客文章了解更多细节:http://cmyker.blogspot.com/2012/11/zend-framework-2-model-database-adapter.html