从字段集中合并多个对象 ZF2
hydrating multiple objects from fieldsets ZF2
我在 ZF2 中水化对象时遇到问题。
我有一个表格可以将与组织相关的信息或与个人相关的信息保存到数据库中。用户做出选择:保存组织或个人。所有 html 个输入只有 1 个表格。
在 ZF2 中,我创建了 2 个字段集。在每个字段集 class 中,我使用 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
补水 OrganizationObject
,RegisterPersonFieldset
补水 PersonObject
。
我想同时对两个对象进行水化,因为这样不会将条件语句引入表单 class。问题是水合只发生在 1 个对象上,具体取决于哪个字段集具有 use_as_base_fieldset = true
。如果两个字段集都具有 use_as_base_fieldset = true
,则代码后面的字段集 (RegisterPersonFieldset) 仅水合其各自的对象。
你能告诉我如何给这两个物体补水吗?也许如何以更好的方式给物体补水?
编辑:
正如@jcropp 指出的那样,我使用个人和组织作为独立实体,它们仅共享 ID 属性。
同时水合两个物体的一种方法是使它们成为同一物体。
从你的问题中不清楚 1) 正在注册的人是注册组织的成员,还是 2) "parties" 正在注册,一方可以是组织或个人.以下是两种情况的一些答案:
如果人员是您的数据结构中组织的成员,同时混合两者的方法是将人员数据视为组织数据元素的 "collections"。此方法利用字段集之间的关系来创建单个数据集,在该数据集中可以同时编辑组织数据和人员数据。见ZF2 Manual。
如果您的目的是注册个别政党,而政党可以是组织或个人,则以相同形式混合其中一个或另一个的方法是使用 table 继承。在单一 table 继承中,您将有一个单一的 table(和一个字段集)用于两种类型的各方,并且在个人或组织类型之间进行选择将指示是否应将数据输入到组织字段中或 table 的人员字段。在多重 table 继承中,您将创建一个与组织 table 和个人 table 相关的政党 table; organization 和 person 字段集将扩展 party 字段集。
我在 ZF2 中水化对象时遇到问题。
我有一个表格可以将与组织相关的信息或与个人相关的信息保存到数据库中。用户做出选择:保存组织或个人。所有 html 个输入只有 1 个表格。
在 ZF2 中,我创建了 2 个字段集。在每个字段集 class 中,我使用 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
补水 OrganizationObject
,RegisterPersonFieldset
补水 PersonObject
。
我想同时对两个对象进行水化,因为这样不会将条件语句引入表单 class。问题是水合只发生在 1 个对象上,具体取决于哪个字段集具有 use_as_base_fieldset = true
。如果两个字段集都具有 use_as_base_fieldset = true
,则代码后面的字段集 (RegisterPersonFieldset) 仅水合其各自的对象。
你能告诉我如何给这两个物体补水吗?也许如何以更好的方式给物体补水?
编辑:
正如@jcropp 指出的那样,我使用个人和组织作为独立实体,它们仅共享 ID 属性。
同时水合两个物体的一种方法是使它们成为同一物体。
从你的问题中不清楚 1) 正在注册的人是注册组织的成员,还是 2) "parties" 正在注册,一方可以是组织或个人.以下是两种情况的一些答案:
如果人员是您的数据结构中组织的成员,同时混合两者的方法是将人员数据视为组织数据元素的 "collections"。此方法利用字段集之间的关系来创建单个数据集,在该数据集中可以同时编辑组织数据和人员数据。见ZF2 Manual。
如果您的目的是注册个别政党,而政党可以是组织或个人,则以相同形式混合其中一个或另一个的方法是使用 table 继承。在单一 table 继承中,您将有一个单一的 table(和一个字段集)用于两种类型的各方,并且在个人或组织类型之间进行选择将指示是否应将数据输入到组织字段中或 table 的人员字段。在多重 table 继承中,您将创建一个与组织 table 和个人 table 相关的政党 table; organization 和 person 字段集将扩展 party 字段集。