0

我有一个表格,保存后会再次显示。在这个表单中有一个坐标字段,它(如果不是由用户手动编辑)使用preUpdate生命周期回调自动更新:

/**
 * @ORM\preUpdate
 */
public function setUpdatedValue() {
    if (!$this->getSomeTrueFalseValue()) {
        $this->setCoordinates();
    }
}

这工作得很好。除了一个例外。正确保存实体并再次显示表单后,此特定字段的值不会更新,因为在调用preUpdate方法之前绑定了表单。如何强制更新此值?

这是action现在的样子:

$em         = $this->getDoctrine()->getEntityManager();
$request    = Request::createFromGlobals();
$object     = $this->getDoctrine()->getRepository($this->repository)->find($id);
if (!$object) return $this->forward('MyBundle:Controller:nonExistent');

$form       = $this->createForm( Factory::create_instance($this->type), $object);

if ('POST' == $request->getMethod()) {
    $form->bindRequest($request);           
    if ($form->isValid()) {
        $em->persist($object);
        $em->flush();
        $this->get('session')->setFlash( 'message', 'Saved');
        $this->get('session')->setFlash( 'type', 'ok' );
    }
}
4

1 回答 1

1

一旦对象被持久化,您可以尝试重新创建表单,即调用

$form       = $this->createForm( Factory::create_instance($this->type), $object);

$em->flush();
于 2012-08-06T10:48:17.903 回答