0

我对子集合的值没有正确补水有疑问。我将 zend 框架 3 与学说 2 一起使用。

由于我必须复制大量代码,因此我将描述我在做什么,如果需要,我将使用代码进行更新。

我们有以下内容:

  • VillaForm 是一个表单元素
  • VillaFieldset 是一个 Fieldset 元素,是 VillaForm 的基本字段集
  • FacilityCategoriesFieldset 是一个 Fieldset,用于 VillaFieldset 中的 Collection 元素

        $this->add([
        'type' => 'Zend\Form\Element\Collection',
        'name' => 'facilityCategories',
        'options' => [
            'count' => 1,
            'allow_add' => true,
            'allow_remove' => true,
            'create_new_objects' => true,
            'target_element' => [
                'type' => FacilityCategoryFieldset::class,
            ],
        ],
    ]);
    
  • 设施字段集,它是一个字段集,用于 FacilityCategoriesFieldset 中的集合元素

        $this->add([
        'type' => 'Zend\Form\Element\Collection',
        'name' => 'facilities',
        'options' => [
            'count' => 1,
            'allow_add' => true,
            'allow_remove' => true,
            'create_new_objects' => true,
            'target_element' => [
                'type' => FacilityFieldset::class,
            ],
        ],
    ]);
    

所以从上面看,我们有

VillaForm contains VillaFieldset that contains Collection of FacilityCategoriesFieldset which contains a Collection of FacilitiesFieldset

假设我们在实际的表单页面上有这个例子。

- Row A of FacilityCategoriesFieldset 
  - Row 1 of FacilitiesFieldset
  - Row 2 of FacilitiesFieldset
  - Row 3 of FacilitiesFieldset

- Row B of FacilityCategoriesFieldset 
  - Row x of FacilitiesFieldset
  - Row y of FacilitiesFieldset
  - Row z of FacilitiesFieldset

我的问题是,表单提交后,虽然发布的数据是正确的,但水化后的结果会是这样的:

- Row A of FacilityCategoriesFieldset 
  - Row x of FacilitiesFieldset
  - Row y of FacilitiesFieldset
  - Row z of FacilitiesFieldset

- Row B of FacilityCategoriesFieldset 
  - Row x of FacilitiesFieldset
  - Row y of FacilitiesFieldset
  - Row z of FacilitiesFieldset

FacilityCategoriesFieldset 的最后一行的FacilityFieldset 行用于FacilityFieldset 的所有行。

这只发生在一个包含另一个集合的集合的字段集时。有没有人暗示我可能做错了什么?如果您需要,我会给您任何其他信息/代码。

非常感谢。

4

1 回答 1

1

您对 a 的实现Collection略有偏差。您不应将 Collection 的类型作为 FQCN,而应将其作为实际对象(Fieldset)。

试试这个:

/**
 * @var CustomFieldset
 */
protected $customFieldset;

public function __construct(CustomFieldset $customFieldset) {
    $this->customFieldset = $customFieldset;
}

// init()
$this->add(
    [
        'type'     => Collection::class,
        'required' => true,
        'name'     => 'customFieldset',
        'options'  => [
            'label'                  => 'Custom fieldsets',
            'count'                  => 1,
            'allow_add'              => true,
            'allow_remove'           => true,
            'should_create_template' => true,
            'target_element'         => $this->customFieldset,
        ],
    ]
);
于 2018-07-27T11:18:43.803 回答