从田间集ZF2中保湿多个物体

时间:2016-01-10 14:30:09

标签: php zend-framework2

我遇到了在ZF2中保湿物体的问题。

我有一个表单,用于将与组织相关的信息或与人员相关的信息保存到数据库中。用户做出选择:保存组织或个人。所有html输入只有1个表单。

在ZF2中,我创建了2个字段集。在每个fieldset类中,我使用setHydrator(new ClassMethods(false))setObject(new <objectForHydration>)。 2个字段集包含在表单中,代码如下:

    $this->add([
        'type' => 'Parties\Form\Fieldsets\RegisterOrganizationFieldset',
        'options' => [
            'use_as_base_fieldset' => true,
        ],
    ]);

    $this->add([
        'type' => 'Parties\Form\Fieldsets\RegisterPersonFieldset',
        'options' => [
            'use_as_base_fieldset' => true,
        ],
    ]);

我希望RegisterOrganizationFieldset能够保湿OrganizationObjectRegisterPersonFieldset能够保湿PersonObject

我想过同时给两个对象加水,因为这不会将条件引入到表单类中。问题是水化仅发生在一个物体上,具体取决于哪个场集具有use_as_base_fieldset = true。如果两个字段集都有use_as_base_fieldset = true,则代码中稍后的字段集(RegisterPersonFieldset)仅对其各自的对象进行水合。

你能说出如何给两个物体保湿吗?也许如何以更好的方式给物体加水?

编辑:

正如@jcropp所指出的那样,我使用Person和Organization作为仅共享Id属性的独立实体的缔约方。

1 个答案:

答案 0 :(得分:1)

同时水合两个物体的一种方法是使它们成为同一物体。

从您的问题中不清楚1)正在注册的人是注册组织的成员,还是2)&#34; party&#34;正在注册,一方可以是组织,也可以是个人。以下是两种情况的答案:

如果人员是您数据结构中的组织成员,那么同时保湿的方法是将人员数据视为&#34;集合&#34;组织数据元素。该方法利用字段集之间的关系来创建单个数据集,其中组织数据和人员数据可以一起编辑。请参阅ZF2 Manual

如果您的意图是注册个人方,并且一方可以是一个组织或一个人,那么以相同的形式保护一方或另一方的方法是使用表继承。在单表继承中,对于两种类型的聚会,您将具有单个表(和单个字段集),并且人或组织类型之间的选择将指示是否应将数据输入到组织字段或表的人员字段中。在多表继承中,您将创建一个与组织表和人员表相关的聚会表;组织和人员字段集将扩展党的字段集。