Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/11/2016, 21:49
X_fran
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 17 años, 2 meses
Puntos: 5
Guardar relacion ManyToMany desde formulario

Hola, tal vez para muchos es muy básico el asunto que planteo, pero para mí que recién comienzo nop.
Tengo un select multiple (en forma de checkbox) en un formulario que me representa una relación M-M (embarazada-riesgo), el problema está a la hora de guardar el registro, me da error el envio del formulario pero no me escribe error alguno en el dev.log, me temo que es en la línea $form->handleRequest($request), pero no se a qué se debe.
Este es el código del action:

Código PHP:
Ver original
  1. public function captarAction(Request $request)
  2.     {
  3.         if ($request->isXmlHttpRequest())
  4.         {
  5.             $idEstructura = $request->get('cmfId', 0);
  6.  
  7.             $em = $this->getDoctrine()->getManager();
  8.             $estructuraOrganizativa = $em->getRepository('AppBundle:EstructuraOrganizativa')->findOneJoinTipoEstructuraOrganizativa($idEstructura);
  9.  
  10.             if (!is_object($estructuraOrganizativa) || $estructuraOrganizativa->getTipoEstructuraOrganizativa()->getId() !== 6)
  11.             {
  12.                 return new Response("Seleccione el CMF al que pertenece la embarazada.", 404);
  13.             }
  14.  
  15.             $nuevaEmbarazada = new Embarazada();            
  16.             $nuevaEmbarazada->setEstructuraOrganizativa($estructuraOrganizativa);
  17.  
  18.             $form = $this->createForm(EmbarazadaType::class, $nuevaEmbarazada, array(
  19.                 'action' => $this->generateUrl('embarazadas_captar', array('cmfId' => $estructuraOrganizativa->getId())),
  20.                 'method' => 'POST',
  21.             ));
  22.  
  23.             if ($request->getMethod() === 'POST')
  24.             {
  25.                 $form->handleRequest($request);
  26.  
  27.                 if ($form->isValid())
  28.                 {
  29.                     $em->persist($nuevaEmbarazada);
  30.                     $em->flush();
  31.  
  32.                     return $this->redirect($this->generateUrl('embarazadas_captar', array('cmfId' => $estructuraOrganizativa->getId())));
  33.                 } else
  34.                 {
  35.                     return new Response($this->renderView('AppBundle:Embarazadas:frmCaptarEmbarazada.html.twig', array('form' => $form->createView())), 406);
  36.                 }
  37.             }
  38.  
  39.             return $this->render('AppBundle:Embarazadas:frmCaptarEmbarazada.html.twig', array('form' => $form->createView(), 'estructura' => $estructuraOrganizativa));
  40.         } else
  41.         {
  42.             throw $this->createNotFoundException("Recurso no encontrado");
  43.         }
  44.     }

de hecho me da un error 406 (devolviendo el formulario ), porque el isValid() da false en todo momento, que es la acción que deberái ocurrir para ese caso, pero no me muestra ningún error en el formulario como tal. Y en el dev log no se almacena ninguna sentencia insert.

Si intentara realizar la operacion edit del registro sucede lo mismo.
Incluso el select múltiple se popula correctamente para las embarazadas que tiene riesgos asociados.
Cómo pudiera depurar o qué puede estar sucediendo, o acaso estoy enfocando mal el manejo de la relación M-M ??.
Anh, el entity Embarazada tiene establecido los métodos addRiesgo, removeRiesgo, getRiesgos