许多表网关在一个模块zf2中


Many table gateway in a module zf2

我正在用zend框架2构建一个CMS。我有两个问题,希望你能帮助我。

  1. 我的模块使用许多不同的SQL表。按照skeleton-application中的示例,我必须这样做:

getServiceConfig() {

返回数组(

'factories' => array(

)

'Album'Model'AlbumTable' => function($sm) {},'AlbumTableGateway' => function ($sm) {},'Album'Model'Trackable' => function($sm) {},'TrackTableGateway' => function ($sm) {},'Album'Model'ArtistTable' => function($sm) {},'ArtistTableGateway' => function ($sm) {},'TrackTableGateway' => function ($sm) {},'Album'Model'SingerArtistTable' => function($sm) {},'SingerTableGateway' => function ($sm) {},…),);}

那么我应该像上面那样在gServiceConfig()中放置许多模型吗?或者你能给我推荐其他款式吗?

  1. 我想问一下,当我们在getServiceConfig中使用"工厂"时,是否只有在我们调用它时才会初始化模型?非常感谢您的回复!

1)您可以避免为每个表类创建工厂的冗余代码。你会得到这样的内容:

'invokables'=>array(
'ModuleName'Model'TableA' => 'ModuleName'Model'TableA',
'ModuleName'Model'TableB' => 'ModuleName'Model'TableB',
'ModuleName'Model'TableC' => 'ModuleName'Model'TableC',
 ),

对此,您可以参考这篇有趣的文章:设置默认Db适配器。

2)是的,服务管理器不会创建任何实例,直到你请求它,即实例只在你调用时创建,例如:

$this->getServiceLocator()->get('Trackable');