使用'preUpdate'生命周期时更新表单值

时间:2012-08-06 10:19:57

标签: forms orm symfony

我有一个表单,在保存后会再次显示。在此表单中有一个坐标字段,使用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' );
    }
}

1 个答案:

答案 0 :(得分:1)

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

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

之后

$em->flush();