0

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が保存され、データが取り込まれます。埋め込まれたドキュメント フィールドを編集するために name を含む fieldset を使用するpersonため、 と を含む入力要素のセットがありname=person[firstName]ますname=person[lastName]

埋め込みドキュメントのフィールドは保存されますが、フォームには入力されません。

回避策を見つけました-$vals = (array) $element->getValue();フィールドセットオブジェクトで値を取得してから

$name = preg_replace("/^(.*)\[(.*)\]$/", "\\2", $elem->getName()); $elem->setValue($vals[$name]);各フィールドセット要素に対して。

より良い解決策はありますか?

4

1 に答える 1

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 を呼び出す必要があると思いました。いいえ。ただの空のオブジェクト。

于 2014-07-02T10:30:36.330 に答える