doctrine-orm - Zend Framework子集合无法正常保湿

标签 doctrine-orm zend-framework2 zend-form zend-framework3 hydration

我对子集合的值无法正确补充水分有疑问。我正在将zend framework 3与教义2结合使用。

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

我们有以下内容:

  • VillaForm,它是表单元素
  • VillaFieldset是Fieldset元素,是VillaForm
  • 的基本字段集
  • FacilityCategoriesFieldset是一个字段集,用于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,
            ],
        ],
    ]);
    
  • FacilitiesFieldset,它是一个字段集,用于FacilityCategoriesFieldset中的Collection元素
        $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的最后一行的FacilitiesFieldset的行用于FacilitiesFieldset的所有行。

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

    非常感谢。

    最佳答案

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

    关于doctrine-orm - Zend Framework子集合无法正常保湿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51540614/

    相关文章:

    css - 无法在 ZF2 View 中获取 TextArea 类型的 TextArea

    symfony - Symfony2 中使用 YAML 的 Doctrine 映射

    php - 如何获取学说中下一个table_id_seq(primary_key)的值?

    forms - Zend Framework 2 表单元素错误类 + 自定义 ViewHelper 来呈现表单

    php - ZF2 依赖注入(inject)别名和多个实例

    php - 如何在 zf2 中使用 smtp 发送电子邮件?

    doctrine-orm - Doctrine DQL 返回多种类型的实体

    php - 原则对产品有问题,但对开发没有问题

    php - 为选择元素设置占位符

    php - 如何使用 Zend 表单描述添加自定义 HTML 标签