querybuilder form fields array forms entity symfony

forms - fields - symfony using form



ActualizaciĆ³n de la entidad de formulario Symfony2 (3)

Esta es en realidad una función nativa de Symfony 2:

Puede generar automáticamente un controlador CRUD desde la línea de comando (a través de doctrine: generar: crud) y reutilizar el código generado.

Documentación aquí: http://symfony.com/doc/current/bundles/SensioGeneratorBundle/commands/generate_doctrine_crud.html

¿Alguien puede mostrarme un ejemplo específico de una actualización de entidad de formulario de Symfony2? El libro solo muestra cómo crear una nueva entidad. Necesito un ejemplo de cómo actualizar una entidad existente donde inicialmente paso el ID de la entidad en la cadena de consulta.

Tengo problemas para entender cómo acceder nuevamente al formulario en el código que verifica una publicación sin volver a crear el formulario.

Y si vuelvo a crear el formulario, significa que también tengo que consultar la entidad nuevamente, lo que no parece tener mucho sentido.

Esto es lo que tengo actualmente pero no funciona porque sobrescribe la entidad cuando se publica el formulario.

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() )); }


Trabajando ahora. 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() )); }


Un vistazo rápido al código CRUD generado automáticamente por el comando de Symfony generate:doctrine:crud muestra el siguiente código fuente para la acción de edición

/** * Displays a form to edit an existing product entity. * * @Route("/{id}/edit", name="product_edit") * @Method({"GET", "POST"}) */ public function editAction(Request $request, Product $product) { $editForm = $this->createForm(''AppBundle/Form/ProductType'', $product); $editForm->handleRequest($request); if ($editForm->isSubmitted() && $editForm->isValid()) { $this->getDoctrine()->getManager()->flush(); return $this->redirectToRoute(''product_edit'', array(''id'' => $product->getId())); } return $this->render(''product/edit.html.twig'', array( ''product'' => $product, ''edit_form'' => $editForm->createView(), )); }

Tenga en cuenta que se pasa una entidad de Doctrine a la acción en lugar de una ID (cadena o entero). Esto realizará una conversión de parámetros implícita y le ahorrará obtener manualmente la entidad correspondiente con la identificación dada.

Se menciona como mejor práctica en la documentación de Symfony.