我有一个表单,在保存后会再次显示。在此表单中有一个坐标字段,使用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' );
}
}
答案 0 :(得分:1)
一旦对象被持久化,您可以尝试重新创建表单,即调用
$form = $this->createForm( Factory::create_instance($this->type), $object);
之后
$em->flush();