ZF2 - ServiceManager注入84个表......乏味

时间:2012-09-19 23:33:09

标签: php zend-framework2

我最初在几个月之前提出了另一个关于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

3 个答案:

答案 0 :(得分:2)

通过这样的大量注入,您最好创建一个服务管理器initalizer,然后实现像DbAdapterAwareInterface这样的接口。如果你想看到这个想法,请看看zf2代码库中的EventManagerAwareInterface。

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

非常好。 php5.3 +只注入*指针或“链接”