我已经阅读了所有相关的内容,但似乎不能解决我的问题。问题在于当编辑数据时,表单只从基本fieldset绑定数据,而不是从子项(例如联系人)拉取数据。因此,表单填充了来自ContactAddress的数据,但没有Contact的数据。当我将查询转储到Zend\Debug中时,所有信息都存在,但它没有到达表单。我希望有人能指出我所犯的愚蠢错误。以下是我认为相关的代码部分:
控制器:
控制器:
$em = $this->getEntityManager();
$id = (int)$this->params()->fromRoute('id',0);
$form = new ContactsForm($em);
$qb = $em->createQueryBuilder();
$qb->select('contactAddressId', 'contact')
->from('Application\Entity\ContactAddress', 'contactAddressId')
->where('contactAddressId = ' . $id)
->leftJoin('contactAddressId.contact', 'contact');
$query = $qb->getQuery();
$contactAddress = $query->getResult();
$form->bind($contactAddress[0]);
return array('form' => $form);
联系人表单:
parent::__construct('orders');
$this->setAttribute('method','post')
->setHydrator(new ClassMethodsHydrator(false));
$this->add(array(
'name' => 'orderId',
'type' => 'hidden',
'attributes' => array(
'id' => 'orderId',
),
));
$contactAddressFieldset = new Fieldsets\ContactAddressFieldset($objectManager);
$contactAddressFieldset->setUseAsBaseFieldset(true);
$this->add($contactAddressFieldset);
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'Add',
'id' => 'submitbutton',
),
));
联系人地址字段集:
parent::__construct('contactAddress');
$hydrator = new AggregateHydrator();
$hydrator->add(new DoctrineHydrator($objectManager,'Application\Entity\ContactAddress'));
$hydrator->add(new DoctrineHydrator($objectManager,'Application\Entity\ContactAddressType'));
$hydrator->add(new DoctrineHydrator($objectManager,'Application\Entity\AddressType'));
$this->setHydrator($hydrator);
$this->setObject(new \Application\Entity\ContactAddress())
->setObject(new \Application\Entity\ContactAddressType())
->setObject(new \Application\Entity\AddressType());
$this->setAttribute('method','post');
$contactFieldSet = new ContactFieldset($objectManager);
$this->add($contactFieldSet);
$this->add(array(
'name' => 'contactAddressId',
'attributes' => array(
'type' => 'hidden',
'id' => 'contactAddressId',
),
));
etc etc
ContactsFieldset:
parent::__construct('contact');
$hydrator = new AggregateHydrator();
$hydrator->add(new DoctrineHydrator($objectManager,'Application\Entity\Contact'));
$hydrator->add(new DoctrineHydrator($objectManager,'Application\Entity\ContactType'));
$this->setHydrator($hydrator);
$this->setObject(new \Application\Entity\Contact())
->setObject(new \Application\Entity\ContactType());
$this->setAttribute('method','post');
$this->add(array(
'name' => 'contactId',
'attributes' => array(
'type' => 'hidden',
'id' => 'contactId',
),
));
感谢您能提供的任何帮助 詹姆斯