ZF2 - 如何使用Hydrator / exchangeArray()填充嵌套对象

时间:2012-10-06 21:34:15

标签: php oop zend-framework2

我有一个包含存储在我的数据库中的值的对象。我的对象还包含另一个对象,它只使用它的ID(外键)存储在数据库中。

http://framework.zend.com/manual/2.0/en/modules/zend.stdlib.hydrator.html

在ZF2中的Hydrator/exchangeArray功能之前,您将使用Mapper来获取创建对象所需的一切。现在我试图通过使用Hydration/exchangeArray填充我的对象来消除这个额外的图层,但是在创建嵌套对象时有点困难。

我的实体是否应该将Inner对象的表注入其中,以便在将其ID传递给我的'exchangeArray'时创建它?

以下是示例实体作为示例。

// Village
id, name, position, square_id

// Map Square
id, name, type

将square_id发送到我的Village的exchangeArray()函数。它将获得mapTable并使用水合器使用我拥有的ID拉入方块。

在我的实体中设置映射器实例似乎不正确,因为我认为它们应该与任何东西断开连接,除了它自己的实体特定参数和功能?

1 个答案:

答案 0 :(得分:5)

我认为你可以从Zend\Stdlib\Hydrator\Strategy\StrategyInterface中受益。

通过创建策略类,您可以将其附加到您的Hydrator,因此当找到特定键时(在这种情况下为square_id),Hydrator将数据传递到策略类上extract()或{{1} }。

然后,策略类可以执行水合和提取数据所需的任何操作。我使用了几个只有hydrate() / getArrayCopy()的策略类以及其他水合/提取多个实体的策略。