Сработало. См. Обновление ниже:
Может ли кто-нибудь показать мне конкретный пример обновления объекта формы Symfony2? В книге показано, как создать новый объект. Мне нужен пример обновления существующего объекта, в котором я сначала передал идентификатор объекта в строке запроса. Вот что я сейчас имею, но он не работает, потому что он перезаписывает объект, когда форма отправляется. Я думаю, что мне трудно понять, как получить доступ к форме снова в коде, который проверяет почту без повторного создания формы. И если я воссоздаю форму, это означает, что я должен снова запросить объект, что, похоже, не имеет особого смысла.
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()
));
}