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

时间:2014-07-02 09:07:48

标签: mongodb zend-framework2 fieldset doctrine-odm zend-form2

我使用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的fieldset来编辑嵌入的文档字段,因此有一组输入元素包含name=person[firstName]name=person[lastName]

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

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

每个fieldset元素的

$name = preg_replace("/^(.*)\[(.*)\]$/", "\\2", $elem->getName()); $elem->setValue($vals[$name]);

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

借助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。不。只是空对象。