これは機能しています。以下のアップデートを参照してください:Symfony2フォームエンティティアップデート
誰でも私にSymfony2フォームエンティティアップデートの具体的な例を教えてもらえますか?本書では、新しいエンティティの作成方法のみを示しています。私は最初にクエリ文字列上のエンティティのIDを渡す既存のエンティティを更新する方法の例が必要です。ここに私が現在持っているものはありますが、フォームが投稿されたときにエンティティを上書きするため、動作しません。私が理解していないことは、フォームを再作成せずに投稿をチェックするコードでフォームに再度アクセスする方法だと思います。フォームを再作成すると、エンティティを再度照会する必要があります。これは意味をなさないと思われます。
public function updateAction($id)
{
$em = $this->getDoctrine()->getEntityManager();
$testimonial = $em->getRepository('MyBundle:Testimonial')->find($id);
$form = $this->createForm(new TestimonialType(), $testimonial);
$request = $this->get('request');
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
echo $testimonial->getName();
if ($form->isValid()) {
// perform some action, such as save the object to the database
//$testimonial = $form->getData();
echo 'testimonial: ';
echo var_dump($testimonial);
$em->persist($testimonial);
$em->flush();
return $this->redirect($this->generateUrl('MyBundle_list_testimonials'));
}
}
return $this->render('MyBundle:Testimonial:update.html.twig', array(
'form' => $form->createView()
));
}
UPDATE:現在作業中です。いくつか調整する必要がありました:
public function updateAction($id)
{
$request = $this->get('request');
if (is_null($id)) {
$postData = $request->get('testimonial');
$id = $postData['id'];
}
$em = $this->getDoctrine()->getEntityManager();
$testimonial = $em->getRepository('MyBundle:Testimonial')->find($id);
$form = $this->createForm(new TestimonialType(), $testimonial);
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
// perform some action, such as save the object to the database
$em->flush();
return $this->redirect($this->generateUrl('MyBundle_list_testimonials'));
}
}
return $this->render('MyBundle:Testimonial:update.html.twig', array(
'form' => $form->createView()
));
}
にbest practiceとして言及されています。あなたの問題についてもう少し明確にすることができますか?私はあなたが「エンティティを上書きするために...働かない」という意味についてはっきりしていません。 – Problematic
証言を取得する関数の2行目は、渡された$ idに基づいてルックアップを試みます。 POSTが発生したときに見つからないので、$ testimonialにnullを返します。私はポストが発生したときに私のフォームで 'id'という名前のフィールドを探すために自分のコードを変更しようとしました。それは私をもう少し詳しく見ていたようですが、私のエンティティのIDがプライベートであることに不満を持ち、私のエンティティでsetId()メソッドを作成することを提案しました。どうやらコンソールはなんらかの理由で私のために作成していなかったようだ。 –
これは機能しています。上記の更新を参照してください。 –