我最初在几个月之前提出了另一个关于ZF2在Beta 1期间注入DI表的问题并且当时发现它确实不可能。现在ZF2已经发布为版本2.0.0而ServiceManager被默认为而不是DI我想我现在有相同的问题我正在重构。
我有84个桌子需要DbAdapter注入它们,我确信必须有一个更好的方法,因为我正在复制自己。
public function getServiceConfig()
{
return array(
'factories' => array(
'accountTable' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$table = new Model\DbTable\AccountTable($dbAdapter);
return $table;
},
'userTable' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$table = new Model\DbTable\UserTable($dbAdapter);
return $table;
},
// another 82 tables of the above
)
)
}
使用EventsManager和ServiceManager,我不知道我在获取应用程序的实例/资源方面的位置。
谢谢,Dom
答案 0 :(得分:2)
通过这样的大量注入,您最好创建一个服务管理器initalizer,然后实现像DbAdapterAwareInterface这样的接口。如果你想看到这个想法,请看看zf2代码库中的EventManagerAwareInterface。
答案 1 :(得分:0)
我编写了一个名为DiWrapper的ZF2模块,您可以使用该模块自动生成并自动更新此类工厂代码。您必须将Zend\Db\Adapter\Adapter
提供给DiWrapper作为共享实例。然后,您可以使用ServiceManager或DiWrapper来获取表类。
答案 2 :(得分:-1)
非常好。 php5.3 +只注入*指针或“链接”