0

我刚刚开始掌握 Zend Framework 2 数据库理论,已经使用版本 1 很长时间了。当业务逻辑需要一个表对象将操作推迟到另一个表对象时,我试图辨别使用许多表的“正确”方式。

在现有网关类中实例化不同的表类似乎是一个漫长而费力的过程。如果我使用与服务管理器工厂相同的流程,例如

$yourData = $myData['thisPart'];
$dbAdapter = $this->_myTableGateway->getAdapter();
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new TestObject());
$tbl = new TestTable(new TableGateway('tbl_name', $dbAdapter, null, $resultSetPrototype));
$tbl->insertSomeData($yourData);

...然后我想它会起作用,但服务管理器不应该在表类中可用。我可以使用工厂定义注入它,但这似乎不是一个好主意。

所以我想我的问题是,一个类(表示一个表并使用这种模式)使用不同的网关类将它的一些数据插入另一个表的最佳方式是什么。还是上面的方法是唯一/“正确”的方法?

4

1 回答 1

0

似乎解决此问题的最佳方法是在需要与其他表网关类交互的每个模型中实现 ServiceLocatorAwareInterface 接口。然后,您可以定义 setServiceLocator(ServiceLocatorInterface $sl) 方法,该方法自动传递对服务定位器的引用。

于 2013-03-01T09:52:45.717 回答