フォームクラスを使った時のデータベースの編集 | 31歳でHWエンジニアから未経験で       Webプログラマーになった軌跡

31歳でHWエンジニアから未経験で       Webプログラマーになった軌跡

電気系の大学に行き、24歳で就職し、HWエンジニアとなり
31歳でWebプログラマーになった挑戦の軌跡です。

Symfony2でフォームクラスを使ったときのデータベースの編集方法に
ハマったので残しときます。
手順3でフォームを作るときに、第2引数にエンティティオブジェクトを使ってしまった。
これで編集保存ができなかった。
リポジトリからgetしたものを使えば、編集できるし、
フォーム画面で編集前のデータが表示される

■手順
  1.エンティティマネージャを取得する
  2.リポジトリから編集したいデータ(レコードをgetする)
  3.フォームを作る。この時、引数は、フォームクラス、リポジトリから編集したいデータ 
  4.フォームで編集した内容を入力しsubmitする
  5.フォームとデータをバインドする
  6.フォームからデータをgetする。
  7.flushする (persistは使わない)

■コード
$request = $this->getRequest(); //リクエストをgetする
$map_en = new MapTable(); //編集では使わない。新規登録で使用
MapTableはエンティティ
MapTableTypeはフォームクラス

//手順1
$em = $this->getDoctrine()->getEntityManager();
//手順2
$product = $em->getRepository('NameChildDiaryBundle:MapTable')->find($id);
//フォームを作るときにgetしたデータを入手する
//手順3
$form = $this->createForm(new MapTableType(), $product);
/*新規登録の時は下記
$form = $this->createForm(new MapTableType(), $map_en);
*/
if ($request->getMethod() == 'POST') {
//手順5
  $form->bind($request);
//手順6
  $product = $form->getData();  
//手順7
  $em->flush();
}