Php ZF2-ServiceManager注入84个表。。。乏味的

Php ZF2-ServiceManager注入84个表。。。乏味的,php,zend-framework2,Php,Zend Framework2,几个月前,我在Beta-1测试期间用DI将ZF2注入到表中,我最初对此发表了另一篇文章,当时我认为这是不可能的。现在ZF2已发布为2.0.0版,ServiceManager默认为而不是DI。我想我现在在重构时也有同样的问题 我有84个表需要DbAdapter注入到其中,我确信一定有更好的方法,因为我正在大量复制自己 public function getServiceConfig() { return array( 'factories' => array(

几个月前,我在Beta-1测试期间用DI将ZF2注入到表中,我最初对此发表了另一篇文章,当时我认为这是不可能的。现在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有了很多类似这样的注入,您最好创建一个服务管理器初始化器,然后实现一个像DbAdapterAwareInterface这样的接口。如果您想看到这个想法的实际应用,请查看zf2代码库中的EventManagerRawareInterface。

它真的很好。php5.3+只注入*指针或“链接”

我编写了一个名为ZF2的模块,您可以使用它自动生成和自动更新此类工厂代码。您必须将
Zend\Db\Adapter\Adapter
作为共享实例提供给DiWrapper。然后,您可以使用ServiceManager或DiWrapper获取表类。

Mmmm,这似乎是硬编码到框架中的。在Zend\Mvc\Service\ServiceManagerConfig.php#configureServiceManager($sm){$serviceManager->addInitializer(//stuff)}中,这会侦听使用AwareInterface创建的任何内容,并将其注入其中。我想我必须添加DbAware作为初始值设定项