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

Smfony2 - FormEvent - Generar formularios dependientes

Estas en el tema de Smfony2 - FormEvent - Generar formularios dependientes en el foro de Symfony en Foros del Web. ¡Hola! Mirad, estoy atascado intentando hacer lo siguiente: Tengo un formulario en que quiero que el usuario seleccione una provincia y municipio. Tengo hecha la ...
  #1 (permalink)  
Antiguo 01/09/2015, 16:11
 
Fecha de Ingreso: enero-2014
Mensajes: 101
Antigüedad: 10 años, 3 meses
Puntos: 7
Smfony2 - FormEvent - Generar formularios dependientes

¡Hola!

Mirad, estoy atascado intentando hacer lo siguiente:
  • Tengo un formulario en que quiero que el usuario seleccione una provincia y municipio. Tengo hecha la base de datos doctrine con una relación ManyToOne y OneToMany para relacionar los municipios con una provincia.
  • Quiero que cuando el usuario seleccione una provincia, se llene un select option en el formulario con los municipios de esa provincia, y sólo de esa.

He estado leyendo el cookbook the symfony2, en donde dice 'How to dynamicallly modify forms using form events' (cómo modificar dinámicamente formularios usando los form events).

Está perfecto, todo muy bonito... pero estoy atascado en el primer paso :(


Código PHP:
 $builder->addEventListener(
            
FormEvents::PRE_SET_DATA,
            function (
FormEvent $event) {
                
$form $event->getForm();

                
// this would be your entity, i.e. SportMeetup
                
$data $event->getData();

                
$sport $data->getSport();
                
$positions null === $sport ? array() : $sport->getAvailablePositions();

                
$form->add('position''entity', array(
                    
'class'       => 'AppBundle:Position',
                    
'placeholder' => '',
                    
'choices'     => $positions,
                ));
            }
        ); 
No entiendo de dónde sale 'getSport()', me imagino que estará definido en la entidad Sport, pero no lo tengo muy claro... porque lo reemplazo por el equivalente en mi class y me da un error. La verdad es que me estoy volviendo un poco loco ya... y no he encontrado nada que me resolviese mis dudas con esto... sólo patéticos tutoriales en los que se dedican a traducir la documentación oficial de Symfony2... vaya personajes..

¿Alguien me podría dar algo de luz en este tema?

De verdad es que esto es desesperante... me gustaría poder ir a una escuela de Symfony2 y pagar lo que sea para que me enseñasen bien Symfony2.. es que así no se puede hacer nada serio.... llevo unos meses con un proyecto serio y es que ya me veo tirando la toalla...otra vez... :(

Un fuerte abrazo
  #2 (permalink)  
Antiguo 01/09/2015, 17:55
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: Smfony2 - FormEvent - Generar formularios dependientes

Que error te manda cuando intentas hacerlo lo mismo con tu entidad ?
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 01/09/2015, 18:14
 
Fecha de Ingreso: enero-2014
Mensajes: 101
Antigüedad: 10 años, 3 meses
Puntos: 7
Respuesta: Smfony2 - FormEvent - Generar formularios dependientes

Formtype

Código PHP:
$builder->addEventListener
            
FormEvents::PRE_SET_DATA
            function (
FormEvent $event) { 
                
$form $event->getForm(); 

                
// this would be your entity, i.e. SportMeetup 
                
$data $event->getData(); 

                
$sport $data->getProvincias(); 
                
$positions null === $sport ? array() : $sport->getAvailablePositions(); 

                
$form->add('ciudades''entity', array( 
                    
'class'       => 'Tuzonabundle:Ciudades'
                    
'placeholder' => ''
                    
'choices'     => $positions
                    
'choice_label' => 'nombre'
                
)); 
            } 
        ); 

Error:

Código PHP:
ErrorCall to a member function getProvincias() on a non-object 

Si hago el form simplemente añadiendo los inputs me funcionan perfecto y puedo trabajar con ellos bien, se guardan en la bbdd y todo perfecto. Por eso creo que las clases están bien hechas... lo que quiero cambiar es cuando selecciones una provincia que filtre los municipios solamente.

Gracias, hhs... qué haría forosdelweb sin ti...
  #4 (permalink)  
Antiguo 03/09/2015, 14:30
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: Smfony2 - FormEvent - Generar formularios dependientes

Hola, el problema es porque no estas validando que exista una instancia cuando se solicita el objeto en el evento. Mete una condición verificando que el objeto es del tipo que esperas.
Código PHP:
Ver original
  1. $builder->addEventListener(
  2.             FormEvents::PRE_SET_DATA,
  3.             function (FormEvent $event) {
  4.                 $form = $event->getForm();
  5.  
  6.                 // this would be your entity, i.e. SportMeetup
  7.                 $data = $event->getData();
  8.  
  9.                 if($data instanceof Provincia) {
  10.                     //aqui agregas la logica
  11.                 }
  12.             }
  13.         );
Ahora recuerda que getProvincias debe de regresar una colección con las Provincias.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 05/09/2015, 12:39
 
Fecha de Ingreso: enero-2014
Mensajes: 101
Antigüedad: 10 años, 3 meses
Puntos: 7
Respuesta: Smfony2 - FormEvent - Generar formularios dependientes

Vale, sí. Tienes razón. Lo he comprobado y no es del tipo que espero. Nos, le haré un print_r a data a ver qué tiene dentro a ver por donde puedo tirar.

Muchas gracias por la ayuda, hhs. Un fuerte abrazo
  #6 (permalink)  
Antiguo 20/09/2015, 16:16
 
Fecha de Ingreso: enero-2014
Mensajes: 101
Antigüedad: 10 años, 3 meses
Puntos: 7
Respuesta: Smfony2 - FormEvent - Generar formularios dependientes

Sigo siendo incapaz de hacerlo.. esto es desesperante.. ¿Tan tonto soy? :(

He puesto una oferta de empleo en este foro para que el que sepa me eche una mano a cambio de algo de dinero. http://www.forosdelweb.com/f65/gener...spana-1137545/

Última edición por hmedcab; 20/09/2015 a las 16:23
  #7 (permalink)  
Antiguo 21/09/2015, 09:23
Avatar de cbretana  
Fecha de Ingreso: junio-2013
Ubicación: Pinar del Rio
Mensajes: 55
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Smfony2 - FormEvent - Generar formularios dependientes

esto creo lo puedes resolver del lado cliente, o sea, poner una action en un controller que te de los municipios en una provincia dada, y te lo provea en JSON, para esto puedes usar el JMS Serialize Bundle, que te resuelve el problema en practicamente 3 lineas de codigo, al hacer esto, con jQuery puedes hacer una peticion a este JSON, y con eventos modificar el layout de un select usando AJAX, es bastante facil en realidad, si quieres te paso el codigo, para brindar algo de proteccion a tu JSON en caso de que no quieras que este accesible la informacion a cualquiera, puedes tokenizar la accion, y definirle tu mismo el token, o puedes controlar que si no es una XMLHTTPRequest, no mostrar nada, o algo asi, symfony tiene metodos para controlar si las peticiones son AJAX o no, si quieres mas tarde te posteo el codigo a esta misma via, saludos, y espero haber sido de ayuda.
__________________
.::Una imagen vale mas que mil palabras::.
  #8 (permalink)  
Antiguo 23/09/2015, 02:45
 
Fecha de Ingreso: enero-2014
Mensajes: 101
Antigüedad: 10 años, 3 meses
Puntos: 7
Respuesta: Smfony2 - FormEvent - Generar formularios dependientes

Me harías un gran favor si me echas una mano.

Entonces... tengo que mirar el jis serialize bundle, y luego usar jQuery para gestionar la petición y luego cargarlo con ajax.

Voy a ver qué tal... :( (desmotivación total)


Gracias, por cierto cbretana.

Etiquetas: dependientes, formularios
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:41.