Foros del Web » Programando para Internet » PHP » Symfony »

[SOLUCIONADO] Guardar relacion ManyToMany desde formulario

Estas en el tema de Guardar relacion ManyToMany desde formulario en el foro de Symfony en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 01/11/2016, 21:49
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 17 años, 1 mes
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
  #2 (permalink)  
Antiguo 23/11/2016, 17:38
 
Fecha de Ingreso: mayo-2009
Mensajes: 6
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Guardar relacion ManyToMany desde formulario

Realmente en tu codigo no aprecio donde estas añadiendo la relación Riesgo a embarazada... supongo que debe ser uno de los campos de tu formulario de tipo EntityType o CollectionType y data_class => 'AppBundle\Entity\Riesgo' o algo asi...

Una forma de depurar podria ser que pasaras tu variable $form a la vista antes de evaluar $form->isValid() y en la vista hicieras:

Código:
{{ dump(form) }}
Si no encuentras nada en el arbolito que sale, investiga sobre la opcion error_bubbling, que segun la documentacion de Symfony significa:
If true, any errors for this field will be passed to the parent field or form. For example, if set to true on a normal field, any errors for that field will be attached to the main form, not to the specific field.
Espero ayudar :)
  #3 (permalink)  
Antiguo 26/11/2016, 08:52
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 17 años, 1 mes
Puntos: 5
Respuesta: Guardar relacion ManyToMany desde formulario

Hola, gracias por responder, disculpa la tardanza, a estas alturas ya lo solucioné, el error no tenía que ver prácticamente con la relación MM, pero bueno ya entiendo un poco más al symfony2.
Si exactamente, es una relación MM representada por un EntityType y symfony gestiona la persistencia de manera transparente.
Gracias.

Etiquetas: formulario, relacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:50.