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

[SOLUCIONADO] Consulta para llenar Select

Estas en el tema de Consulta para llenar Select en el foro de Symfony en Foros del Web. Estoy iniciando con los formularios de symfony2, tengo la siguiente duda: En un arbol al hacer click en un nodo, se muestra un formulario para ...
  #1 (permalink)  
Antiguo 18/10/2016, 10:53
 
Fecha de Ingreso: octubre-2007
Mensajes: 208
Antigüedad: 9 años, 3 meses
Puntos: 3
Consulta para llenar Select

Estoy iniciando con los formularios de symfony2, tengo la siguiente duda:
En un arbol al hacer click en un nodo, se muestra un formulario para crear un nodo hijo, ahora bien los nodos tienen una clasificacion: 1:Nivel Nacional, 2:Provincial, 3:Municipal, 4:Area de Salud, 5:GBT, 6:CMF, 7:Hospital, 8:Hogar Materno.
Existen nodos que por el tipo que constituyen pueden crear nodos hijos de varias clasificaciones de las antioriores, mientras otros solo pueden crear un solo tipo de nodo

Al action que crea el formulario llega el parametro que indica el tipo de nodo seleccionado, en base a ese tipo de nodo deberían ser los valores que tome el select del formulario que contiene los tipos de nodos permitidos como hijos de ese nodo. Como armar la query en el formulario en dependencia de ese parametro para llenar el select ?? Es decir como le paso al constructor del formulario ese parametro ?? En dependencia de ese parametro pasado al formulario, será el WHERE IN para popular el select.
  #2 (permalink)  
Antiguo 01/11/2016, 22:41
 
Fecha de Ingreso: octubre-2007
Mensajes: 208
Antigüedad: 9 años, 3 meses
Puntos: 3
Respuesta: Consulta para llenar Select

Bueno, la respuesta está en emplear un evento en la clase del formulario, de tipo PRE_SET_DATA, de manera tal que se tome el tipo de estructura, ese si si le establece al entity asociado al formulario, y basado en este, establecer un queryBuilder para el input de tipo select que se desea popular, de la siguiente forma:
Código PHP:
Ver original
  1. $builder->addEventListener(
  2.                 FormEvents::PRE_SET_DATA, function (FormEvent $event)
  3.         {
  4.             $data = $event->getData();
  5.             $form = $event->getForm();
  6.  
  7.             if ($event->getData()->getId() === NULL)
  8.             {
  9.                 $nodoPadre = $data->getParent();
  10.  
  11.                 $tipoEstructuraNodoPadre = $nodoPadre->getTipoEstructuraOrganizativa()->getId();
  12.  
  13.                 $formOptions = array(
  14.                     'label' => 'Tipo de Estructura',
  15.                     'class' => 'AppBundle:TipoEstructuraOrganizativa',
  16.                     'query_builder' => function(EntityRepository $er) use($nodoPadre)
  17.                     {
  18.                         return $er->findAllTiposPermitidosComoHijosQueryBuilder($nodoPadre);
  19.                     },
  20.                     'choice_label' => 'nombre',
  21.                 );                
  22.  
  23.                 $form->add('tipoEstructuraOrganizativa', EntityType::class, $formOptions);              
  24.                
  25.             }
  26. // en caso que el formulario esté en modo edicion, no se mostrará el control.
  27.         });



La zona horaria es GMT -6. Ahora son las 13:07.