如何将嵌入的 Doctrine 文档填充到 Zend 字段集中?

Posted

技术标签:

【中文标题】如何将嵌入的 Doctrine 文档填充到 Zend 字段集中?【英文标题】:How to populate embedded Doctrine document into Zend fieldset? 【发布时间】:2014-08-23 00:08:15 【问题描述】:

我使用 ZF2+Doctrine+DoctrineMongoODM 模块。我将Person 文档嵌入到House 文档中:

/**
 * @ODM\Document
 */
class Custelement
    /** @ODM\EmbedOne(targetDocument="Person") */
    protected $person;

所以

#Document is binded to form
$form->bind($document);. 
#Common hydrator is used
$form->setHydrator(new \DoctrineModule\Stdlib\Hydrator\DoctrineObject($docManager)); 

文档House 的公共字段被保存和填充得很好。我使用名称为person 的字段集来编辑嵌入的文档字段,因此有一组带有name=person[firstName]name=person[lastName] 的输入元素。

嵌入文档的字段已保存但未填充到表单中。

我找到了一种解决方法 - 只需通过 $vals = (array) $element->getValue(); 获取字段集对象的值,然后

$name = preg_replace("/^(.*)\[(.*)\]$/", "\\2", $elem->getName()); $elem->setValue($vals[$name]); 用于每个字段集元素。

有没有更好的解决方案?

【问题讨论】:

【参考方案1】:

在 zf 手册的帮助下,我找到了我错过的东西。我应该为字段集设置 Hydrator 和 Object:http://framework.zend.com/manual/2.0/en/modules/zend.form.collections.html#creating-fieldsets

$person->setHydrator(
    new \DoctrineModule\Stdlib\Hydrator\DoctrineObject($docManager)
);
$person->setObject(new \Cab\Document\Person());

我认为我应该用填充对象调用 setObject。不是。只是空对象。

【讨论】:

以上是关于如何将嵌入的 Doctrine 文档填充到 Zend 字段集中?的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine ODM 嵌入文档父参考

Symfony2 Doctrine ODM 嵌入类表单验证

如何填充嵌套的 Mongoose 嵌入文档

如何在猫鼬的嵌入式文档中填充字段?

从父实体映射中将可嵌入字段设置为主键 - Doctrine2

如何使 Doctrine hydrator 填充实体?