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

[SOLUCIONADO] createFormBuilder no carga misma Entidad pasada

Estas en el tema de createFormBuilder no carga misma Entidad pasada en el foro de Symfony en Foros del Web. Hola, Tengo el siguiente problema, tengo un formulario en donde se listan todos los Arrendatarios pero si le paso el ID de un arrendatario en ...
  #1 (permalink)  
Antiguo 22/07/2014, 12:47
Avatar de fhederico  
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 8 meses
Puntos: 23
createFormBuilder no carga misma Entidad pasada

Hola,

Tengo el siguiente problema, tengo un formulario en donde se listan todos los Arrendatarios pero si le paso el ID de un arrendatario en especifico no lo deja seleccionado.

En mi controllers tengo esto, lo dejare simplificado

Código PHP:
Ver original
  1. $entity = $em->getRepository('ANWebBundle:Arrendador')->findOneById($id);
  2.  
  3. $form   = $this->createFormBuilder($entity)
  4.             ->add('nombre')
  5.             ->add('id', 'entity',
  6.                 array(
  7.                     'class' => 'ANWebBundle:Arrendador',
  8.                     'empty_value' => 'texto.label.arrendador.add.opcionDefault',
  9.                     'query_builder'  => function(EntityRepository $er)
  10.                                         {
  11.                                             return $er    ->createQueryBuilder('a')
  12.                                                         ->orderBy('a.apellidoPaterno', 'ASC');
  13.                                         }
  14.                 )
  15.             )
  16.             ->getForm()
  17.         ;
  18.  
  19.         return array(
  20.             'entity' => $entity,
  21.             'form'   => $form->createView()
  22.         );

Y en mi Plantilla o vista deje solamente esto por si era un error al mostrarlo

Código HTML:
Ver original
  1. {{ form_rest(form) }}

No es un error del parametro, ni de la plantilla ya que lo chistoso de esto es que si imprimo en la plantilla el ID de la entidad lo muestra, es decir, la entidad la encuentre y la carga, de hecho el campo "nombre" que cargo ironicamente me muestra el nombre que corresponde a la Base de Datos de ese Arrendatario.

La entidad pasada al formulario es de tipo Arrendatario.

Lo que no se, es si existe algun problema en mostrar en el formulario la misma entidad que viene por parametro, es decir, estoy pasando una entidad Arrendatario y en mi formulario llamo a la entidad Arrendatario pero es obviamente para que me cargue el listado, normalmente cuando es una relacion con otras tablas no tengo problemas, pero este en particular me llama la atencion ya que simplemente es como si no pudiera "seleccionar" la entidad que se le pasa en el listado.

He probado con createFormBuilder o creando un formulario Type pero el resultado es lo mismo, alguna idea? espero se entienda
__________________
Si encuentras que tu pregunta fue respondida, se agradeceria enormemente que la marcaras como solucionada... si... es el boton verde gigante que esta al final de la pagina :)
  #2 (permalink)  
Antiguo 22/07/2014, 14:21
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: createFormBuilder no carga misma Entidad pasada

Cual es la finalidad de hacer eso ? que quieres hacer con el formulario ?
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 22/07/2014, 15:05
Avatar de fhederico  
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 8 meses
Puntos: 23
Respuesta: createFormBuilder no carga misma Entidad pasada

Simple,

Tienes un grupo de Arrendadores, dentro de este grupo, tu puedes agregar N Arrendadores con sus respectivos datos obviamente. Mediante un select en donde estan todos los Arrendadores tu puedes escoger uno.

Al momento de editar este grupo, te carga todos sus miembros, y cada miembro tendra un select en donde deberia cargarte el Arrendador que ya fue escogido, porque? porque este select te permite seleccionar otro y esto actualizara la informacion que se cargo para ese miembro.


Es un sistema que estoy migrando y la logica esta creada asi que solo traspaso la informacion debido a la cantidad de datos que existen no puedo modificar la base de datos.

Mas que nada me llama la atencion que no cargase o no dejase seleccionado el que se le esta indicando.

EDITO:

Actualizo
__________________
Si encuentras que tu pregunta fue respondida, se agradeceria enormemente que la marcaras como solucionada... si... es el boton verde gigante que esta al final de la pagina :)

Última edición por fhederico; 22/07/2014 a las 15:12
  #4 (permalink)  
Antiguo 22/07/2014, 15:21
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: createFormBuilder no carga misma Entidad pasada

Ok, entiendo entonces que en el formulario en tu campo entity quieres que aparezca seleccionado un arrendador previamente seleccionado, Si es así, no lo puedes hacer de la forma en la que supones.
Publica tu entidad para darnos una idea de lo que tienes
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 22/07/2014, 15:29
Avatar de fhederico  
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 8 meses
Puntos: 23
Respuesta: createFormBuilder no carga misma Entidad pasada

Me llama la antencion esto de "no lo puedes hacer de la forma en la que supones", te podrias explicar un poco mas por favor??
__________________
Si encuentras que tu pregunta fue respondida, se agradeceria enormemente que la marcaras como solucionada... si... es el boton verde gigante que esta al final de la pagina :)
  #6 (permalink)  
Antiguo 22/07/2014, 17:59
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: createFormBuilder no carga misma Entidad pasada

Basándome en lo que tienes de entrada el id supongo es un integer y el entity es un objeto. de tal forma que no va suceder la comparación que esperas para que quede seleccionada la entidad que escogiste en un paso previo.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 23/07/2014, 09:05
Avatar de fhederico  
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 8 meses
Puntos: 23
Respuesta: createFormBuilder no carga misma Entidad pasada

Pero, se supone que tu al generar el formulario, tu lo que haces es pasarle una entidad objeto para que el tome los atributos de dicha entidad y lo cargue, en este caso el ID de entrada es para que busque y cargue una entidad de tipo Arrendador

Código PHP:
Ver original
  1. $entity = $em->getRepository('ANWebBundle:Arrendador')->findOneById($id);

Una vez cargada le pasas dicha entidad al FORM este deberia poder seleccionar dicha entidad dentro del select

Código PHP:
Ver original
  1. $form   = $this->createFormBuilder($entity)

Ya que los atributos de la Entidad, tambien tiene un ID entero.
__________________
Si encuentras que tu pregunta fue respondida, se agradeceria enormemente que la marcaras como solucionada... si... es el boton verde gigante que esta al final de la pagina :)
  #8 (permalink)  
Antiguo 23/07/2014, 13:13
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: createFormBuilder no carga misma Entidad pasada

Cita:
Una vez cargada le pasas dicha entidad al FORM este deberia poder seleccionar dicha entidad dentro del select
El formulario solo mapea las propiedades de la clase, en este caso tu clase Arrendador.
El campo de tipo entity que usas en el formulario para tu caso recupera entidades de tipo Arrendador y esa entidad no es del mismo tipo que la propiedad id con la que estas queriendo comparar.
En otras palabras para que quedara seleccionado como tu esperas tendrías que tener una propiedad que aceptara objetos de tipo Arrendador en Arrendador pero eso requiere que tu Entidad tenga una relación uno a muchos o muchos a muchos hacia si misma:http://docs.doctrine-project.org/en/...lf-referencing
Pero si no es lo que requieres entonces necesitas otra cosa; asi que yo creo que necesitas darle la vuelta al problema y pensar que quieres hacer con el formulario para ver que se puede hacer
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #9 (permalink)  
Antiguo 23/07/2014, 14:22
Avatar de fhederico  
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 8 meses
Puntos: 23
Respuesta: createFormBuilder no carga misma Entidad pasada

Si, tienes razon pero no. La logica que me indicas efectivamente tiene sentido, pero es ilogico tener que crear una relacion con Arrendador para obtener lo que deseo, de todos modos agradezco mucho tu ayuda.

Dejo la solucion

http://stackoverflow.com/questions/15752115/symfony2-set-a-selected-value-for-the-entity-field


Dejo el controllers como quedo con la solucion que era muy simple al final

Código PHP:
Ver original
  1. $entity = $em->getRepository('ANWebBundle:Arrendador')->findOneById($id);
  2.      
  3. $form   = $this->createFormBuilder($entity)
  4.                 ->add('nombre')
  5.                 ->add('id', 'entity',
  6.                     array(
  7.                         'class' => 'ANWebBundle:Arrendador',
  8.                         'empty_value' => 'texto.label.arrendador.add.opcionDefault',
  9.                         'query_builder'  => function(EntityRepository $er)
  10.                                             {
  11.                                                 return $er    ->createQueryBuilder('a')
  12.                                                             ->orderBy('a.apellidoPaterno', 'ASC');
  13.                                             }
  14.                     )
  15.                 )
  16.                 ->getForm()
  17.             ;
  18.  
  19. //Solucion:
  20. //En el Hijo, setea la entidad que le indico y hace el match como lo requeria ^^
  21. $form->get('id')->setData($entity);
  22.  
  23.      
  24. return array(
  25.                 'entity' => $entity,
  26.                 'form'   => $form->createView()
  27.             );


EDITO:

Solo hay que fijarse que si la entidad pasada no tiene datos, puede producir error, asi que se deberia agregar alguna validacion antes del "setData" ;)


Gracias
__________________
Si encuentras que tu pregunta fue respondida, se agradeceria enormemente que la marcaras como solucionada... si... es el boton verde gigante que esta al final de la pagina :)

Última edición por fhederico; 23/07/2014 a las 14:33 Razón: Add Info
  #10 (permalink)  
Antiguo 24/07/2014, 08:08
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: createFormBuilder no carga misma Entidad pasada

Cita:
Si, tienes razon pero no. La logica que me indicas efectivamente tiene sentido, pero es ilogico tener que crear una relacion con Arrendador para obtener lo que deseo, de todos modos agradezco mucho tu ayuda.
Ya vi que querías hacer, en lo personal cuando la operación del formulario no se apega a los campos de la entidad del todo, lo que hago es crear un formulario como lo deseo sin Entity o Pasándole un DTO o un Command, Pero ya es cuestión de gustos y necesidades.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: entidad
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 21:41.