gpt4 book ai didi

zend-framework2 - Zend Framework 2 用户指南中的 AlbumTableGateway

转载 作者:行者123 更新时间:2023-12-04 05:09:41 25 4
gpt4 key购买 nike

在当前 (2.1) ZF2 用户指南的“Database and models”一章中有一个代码片段,我不明白:

( block “使用ServiceManager配置表网关并注入(inject)AlbumTable”)

...
class Module
{
// getAutoloaderConfig() and getConfig() methods here

// Add this method:
public function getServiceConfig()
{
return array(
'factories' => array(
'Album\Model\AlbumTable' => function($sm) {
$tableGateway = $sm->get('AlbumTableGateway');
$table = new AlbumTable($tableGateway);
return $table;
},
'AlbumTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Album());
return new TableGateway('album', $dbAdapter, null, $resultSetPrototype);
},
),
);
}
}

变量 $sm稍后将成为 Zend\ServiceManager\ServiceManager 的一个实例, 对? Zend\ServiceManager\ServiceManager#get(...) 方法需要一个类名作为第一个参数。但是没有类 AlbumTableGateway。只有两个模型类:Album\Model\Album 和 Album\Model\AlbumTable。

这是指南中的错误还是我错误地理解了代码?

谢谢

最佳答案

想到这一点的最好方法是 ServiceManager 的 get()方法采用键值,而不是类名。键值需要映射到将导致返回类实例的内容。

如果 key 在 invokables 内部分,然后 ServiceManager 将尝试实例化 key 指向的字符串,假设它是一个类名:

'invokables' => array(
'some_name' => 'My\Mapper\SomeClassName',
),

如果 key 在 factories 内部分,然后 ServiceManager 将执行 key 指向的回调并期望返回一个对象实例:
'factories' => array(
'some_name' => function($sm) { return new \My\Mapper\SomeClassName(); },
),

通常,当您需要做的不仅仅是实例化一个类时,您会使用工厂 - 通常您需要使用另一个依赖项设置该类。如果您只需要实例化一个类,请使用可调用的。

关于zend-framework2 - Zend Framework 2 用户指南中的 AlbumTableGateway,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15032330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com