Lo tengo trabajando. Ver la actualización a continuación:Symfony2 Form Entity Update
¿Alguien puede por favor mostrarme un ejemplo específico de una actualización de entidad de formulario Symfony2? El libro solo muestra cómo crear una nueva entidad. Necesito un ejemplo de cómo actualizar una entidad existente donde paso inicialmente el ID de la entidad en la cadena de consulta. Esto es lo que tengo actualmente, pero no funciona porque sobrescribe la entidad cuando se publica el formulario. Supongo que lo que tengo problemas para entender es cómo volver a acceder al formulario en el código que busca una publicación sin volver a crear el formulario. Y si recreo el formulario, significa que también tengo que consultar nuevamente la entidad, lo cual no parece tener mucho sentido.
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()
));
}
ACTUALIZACIÓN: working now. Tuve que ajustar algunas cosas:
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()
));
}
Esto es similar al código que utilizo para la edición de entidades existentes. ¿Puedes ser un poco más claro sobre tu problema? No estoy seguro de a qué te refieres con '... no funciona porque sobrescribe la entidad ...' – Problematic
La segunda línea en la función que capta el testimonio intenta hacer una búsqueda basada en el $ id pasado. No encuentra uno cuando se produce el POST, por lo que devuelve null para $ testimonial. Intenté cambiar mi código para buscar el campo oculto en mi formulario llamado 'id' cuando se produce la publicación. Eso pareció llevarme un poco más allá, pero luego se quejó de que mi entidad era privada y me sugirió que creara un método setId() en mi entidad. Aparentemente, la consola no me creó una por alguna razón. –
Lo tengo trabajando. Ver la actualización en la publicación anterior. –