Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Convertir array a Entidad symfony

31 de enero de 2017

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

#1

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

1 febrero 2017, 12:12