0

保存後に再度表示されるフォームがあります。このフォーム内には座標用のフィールドがあり、(ユーザーが手動で編集しない場合)preUpdateライフサイクル コールバックを使用して自動的に更新されます。

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

これはかなりうまくいきます。1 つの例外を除いて。エンティティが正しく保存され、フォームが再度表示された後、 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 に答える