Как заполнить встроенный документ Doctrine в Zend fieldset?

#mongodb #zend-framework2 #fieldset #doctrine-odm #zend-form2

#mongodb #zend-framework2 #набор полей #doctrine-odm #zend-form2

Вопрос:

Я использую модуль ZF2 Doctrine DoctrineMongoODM. У меня есть Person документ, встроенный в House document:

 /**
 * @ODMDocument
 */
class Custelement{
    /** @ODMEmbedOne(targetDocument="Person") */
    protected $person;
  

Итак

 #Document is binded to form
$form->bind($document);. 
#Common hydrator is used
$form->setHydrator(new DoctrineModuleStdlibHydratorDoctrineObject($docManager)); 
  

Общие поля документа House отлично сохраняются и заполняются. Я использую fieldset с именем person для редактирования полей встроенного документа, поэтому есть набор элементов ввода с name=person[firstName] и name=person[lastName] .

Поля встроенного документа сохраняются, но не заполняются в форме.

Я нашел обходной путь — просто получите значения по $vals = (array) $element->getValue(); для объекта fieldset, а затем

$name = preg_replace("/^(.*)[(.*)]$/", "\2", $elem->getName());
$elem->setValue($vals[$name]);
для каждого элемента fieldset.

Есть ли лучшее решение?

Ответ №1:

С помощью руководств zf я нашел то, что пропустил. Я должен установить гидратор и объект для набора полей:http://framework.zend.com/manual/2.0/en/modules/zend.form.collections.html#creating-fieldsets

 $person->setHydrator(
    new DoctrineModuleStdlibHydratorDoctrineObject($docManager)
);
$person->setObject(new CabDocumentPerson());
  

Я подумал, что мне следует вызвать setObject с заполненным объектом. Нет. Просто пустой объект.