Symfony2持久保存相关对象

时间:2013-02-11 15:16:26

标签: symfony doctrine-orm

我的问题: 实体地址簿 1-N 实体编号

控制器使用AddressBook及其编号显示编辑表单,但是当我保存表单时,出现此错误: 致命错误:在非对象上调用成员函数setTipo()

但奇怪的是,数据保存正确

这是我的代码:

 /**
 * Modifica dati Anagrafica
 * @Route("/contatto/{id}/modifica", name="_anagrafica_modifica")
 * @Template()
 */
public function modificaAction($id)
{
    $em = $this->getDoctrine()->getManager();
    $anagrafica = $em->getRepository('MercurioInterfaceBundle:Anagrafica')->find($id);

    if (!$anagrafica) {
        throw $this->createNotFoundException('No anagrafica found for id '.$id);
    }

    $form = $this->createForm(new \Mercurio\InterfaceBundle\Form\Anagrafica\FormAnagrafica(), $anagrafica);

    $request = $this->getRequest();

    if ($request->getMethod() == 'POST')
    {
        $form->bind($request);
        if ($form->isValid())
        {
            $chiave = $request->request->get('anagrafica');

            $em = $this->getDoctrine()->getManager();
            $anagrafica = $em->getRepository('MercurioInterfaceBundle:Anagrafica')->find($id);

            $anagrafica->setNominativo($chiave['nominativo']);
            $anagrafica->setIndirizzo($chiave['indirizzo']);
            $anagrafica->setCap($chiave['cap']);
            $anagrafica->setCitta($chiave['citta']);
            $anagrafica->setNote($chiave['note']);
            $em->flush();

            $dettaglio = $em->getRepository('MercurioInterfaceBundle:AnagDettaglio')->findBy(array('anagrafica_id' => $id,));
            foreach ($chiave['anag_dettagli'] as $d)
            {
                $dettaglio->setTipo($d['tipo']);
                $dettaglio->setValore($d['valore']);
                $dettaglio->setRiferimento($d['riferimento']);
            }
            $em->flush();

            return $this->redirect($this->generateUrl('_anagrafica_contatto', array('id' => $id)));
        }
    }

    return array(
        'form' => $form->createView(),
        'id' => $id
    );
}

1 个答案:

答案 0 :(得分:0)

解决:

$form = $this->createForm(new \Mercurio\InterfaceBundle\Form\Anagrafica\FormAnagrafica(),$anagrafica);
if ($request->isMethod('POST')){
  $form->bind($request);

  if ($form->isValid()) {
    $em->persist($anagrafica);
    $em->flush();
    return $this->redirect(....)
  }
}