Hola,
LLevo un tiempo programando en symfony y tengo un problema que no puedo resolver en esta aplicación (otras veces no he tenido problema).
Tengo 3 entidades: User, Distribution y Location
User y Distribution, tienen una propiedad Location que recoge los valores de Location. Los usuarios (User) tienen definidas Locations.
Cuando voy a crear un nuevo form para Distribution, quiero que las locations que aparezcan sean las del usuario que está logado.
Consigo verlas modificando el controlador de Distribution, pero al guardarlas me dice que esperaba una instancia de Location.
Para recoger las Location del User he creado un Repository en Locations que realiza una consulta y le devuelve las Locations del User. Desde DistributionController::CreateCreateForm() llamo a esta consulta y lo guardo en una variable. Luego lo paso por un foreach.. :
foreach ($locationsUser as $location){ $idLista[] = $location->getId(); $nombreLista[] = $location->getName(); $arrayMisListas = array_combine($idLista, $nombreLista); }
Y le digo que sean los valores de mi campo
$form ->add('locations', 'choice', array( 'choices' => $arrayMisListas, ))
Al guardar me da el error comentado.
Muchas gracias de antemano.
Un saludo, Dani.-
Respuestas
SOLUCIONADO:
Para que no me devuelva un error indicando que no le estoy pasando una instancia de la clase, hay que cambiar el "setter" de la clase:
public function setLocations($locations) //public function setLocations(\DDLineal\XXXBundle\Entity\Location $locations = null) { $this->locations = $locations; return $this; }
Además, también hay que añadir en el método createAction() una variable que recoja el valor del formulario y después incluirlo en la entidad con su método "set":
//Recogemos la "location" que viene del formulario del path: /distribution/new $locationGetForm = $this->getDoctrine()->getRepository('XXXBundle:Location')->find($form->get('locations')->getData()); if ($form->isValid()) { //Añadimos al objeto el valor de la "location" que hemos recogido del formulario antes de grabar $entity->setLocations($locationGetForm); $em = $this->getDoctrine()->getManager(); $em->persist($entity); $em->flush(); return $this->redirect($this->generateUrl('distribution_show', array('id' => $entity->getId()))); }
Espero que le pueda valer a alguien.
Un saludo,
@danicambe