Zend Framework 子集合不能正常补水

Zend Framework child collection not hydrating properly

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

由于我必须复制很多代码,所以我将描述我在做什么,如果需要我会更新代码。

我们有以下内容:

所以从上面看我们有

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

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

- 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 的最后一行的 FacilitiesFieldset 行用于 FacilitiesFieldset 的所有行。

只有当一​​个字段集包含一个集合和另一个集合时才会发生这种情况。有没有人暗示我可能做错了什么? 有需要的我再给你info/code

非常感谢。

您对 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,
        ],
    ]
);