9

我刚刚阅读Rob Allen的akrabat ZF2教程(http://akrabat.com/wp-content/uploads/Getting-Started-with-Zend-Framework-2.pdf),了解如何将依赖注入到您的东西中,例如将表适配器注入到表类中。Zend Framework 2 - DI,并且必须将表格适配器注入表格......乏味?

这似乎是我应该如何做到这一点:

 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', 
      ) 
     ), 

任何人这样做,并找到了更好的解决方案?

感谢,大教堂

+0

只要看看你在哪里定义数组(并使用数组作为键),我的印象是数组键只能是PHP中的字符串或整数。如果这是错误的,有人可以纠正我吗? – bearver

+0

是的有道理:D我试着直接注入DB适配器到AbstractTable中,但它的抽象类并不起作用。然后我试着把它放到Zend \ Db \ Table \ Table中,然后再扩展它,但是这又不起作用......必须有更好的方法来比指定相同的代码90次 –

回答

1

你的问题是一个很好的,我同意,这一个场景,依赖注入是没有意义的。我还没有浏览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); 

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

此外,我相信你可以存储这种类型的连接数据的各种其他格式(XML等)。

+0

我想我可能已经绊倒了在答案!看起来EvanDotPro已经创建了一个DiPdoMysql类,它看起来像是PdoMysql的友好Di的扩展。 https://github.com/EvanDotPro/EdpUser 该DiPdoMysql是在https://github.com/EvanDotPro/EdpCommon/tree/master/src/Zend/Db/Adapter –

+0

@DominicWatson:有趣,似乎像ZF2应supoort这种行为本身就是这种类型。 –

+0

是的,我想我记得读到他的DiPdoMysql类在那里,直到Zend \ DB被完全重写:D –