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

[SOLUCIONADO] Valor por defecto en Combo

Estas en el tema de Valor por defecto en Combo en el foro de Symfony en Foros del Web. Hola. Tengo esto en el controlador: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original public function anadir_datos_de_equiposAction ( $id )   {     $datos_de_equipos = new ...
  #1 (permalink)  
Antiguo 07/10/2016, 12:20
 
Fecha de Ingreso: mayo-2009
Mensajes: 727
Antigüedad: 7 años, 9 meses
Puntos: 6
Valor por defecto en Combo

Hola. Tengo esto en el controlador:
Código PHP:
Ver original
  1. public function anadir_datos_de_equiposAction($id)
  2.   {
  3.     $datos_de_equipos = new T_Datosequipos();
  4.     $form = $this->crear_form_anadir($datos_de_equipos);
  5.        
  6.     return $this->render('IBSEquiposBundle:Datos_de_equipos:anadir.html.twig',
  7.                           array('id' => $id,'form' => $form->createView()));
  8.   }
  9.  
  10.   private function crear_form_anadir(T_Datosequipos $entity)
  11.   {
  12.     $form = $this->createForm(new T_DatosequiposType(), $entity, array(
  13.            'action' => $this->generateUrl('ibs_datos_de_equipos_ejecutar_anadir',
  14.             array('id' => $entity->getId())),
  15.            'method' => 'POST'
  16.        ));
  17.     return $form;
  18.   }

Este es el formulario

Código PHP:
Ver original
  1. class T_DatosequiposAnadirType extends AbstractType
  2. {
  3.     /**
  4.      * @param FormBuilderInterface $builder
  5.      * @param array $options
  6.      */
  7.     public function buildForm(FormBuilderInterface $builder, array $options)
  8.     {
  9.         $builder
  10.           ->add('subequipos', 'entity', array(
  11.                 'label'                 => 'Nombre del Subequipo',
  12.                 'class'                 => 'IBSEquiposBundle:T_Subequipos',
  13.                 'query_builder'         => function (EntityRepository $er) {
  14.                                            return $er->createQueryBuilder('r');
  15.                 },
  16.                 'choice_label'          => 'getEquiposNombreTuneado'))
  17.           ->add('personal', 'entity', array(
  18.                 'label'                 => 'Nombre del Equipo',
  19.                 'class'                 => 'IBSEquiposBundle:T_Personal',
  20.                 'query_builder'         => function (EntityRepository $er) {
  21.                                            return $er->createQueryBuilder('u');
  22.                 },
  23.                 'choice_label'          => 'getFullNombre'))
  24.           ->add('puestos', 'entity', array(
  25.                 'label'                 => 'Temporada',
  26.                 'class'                 => 'IBSGeneralBundle:T_Puestos',
  27.                 'query_builder'         => function (EntityRepository $er) {
  28.                                            return $er->createQueryBuilder('z');
  29.                 },
  30.                 'choice_label'          => 'getNombrePuesto'))
  31.           ->add('tipos_de_puestos', 'entity', array(
  32.                 'label'                 => 'Categoria',
  33.                 'class'                 => 'IBSGeneralBundle:T_Tipos_de_puestos',
  34.                 'query_builder'         => function (EntityRepository $er) {
  35.                                            return $er->createQueryBuilder('s');
  36.                 },
  37.                 'choice_label'          => 'getNombreTipoDePuesto'))
  38.           ->add('guardar', 'submit', array('label' => 'Guardar Datos'))
  39.         ;
  40.     }
  41.    
  42.     /**
  43.      * @param OptionsResolver $resolver
  44.      */
  45.     public function configureOptions(OptionsResolver $resolver)
  46.     {
  47.         $resolver->setDefaults(array(
  48.             'data_class' => 'IBSEquiposBundle\Entity\T_Datosequipos'
  49.         ));
  50.     }
  51. }

El combo subequipos devuelve estos datos html:
Código HTML:
Ver original
  1. <select id="t_datosequipos_subequipos" name="t_datosequipos[subequipos]" class="form-control"><option value="1">Aficionado B</option><option value="2">Juvenil A</option><option value="3">Aficionado A</option></select>

Lo que quiero es que el option con value 2 sea selected, es decir, la opción predeterminada.

Por mas informacion que he buscado no soy capaz de lograrlo
  #2 (permalink)  
Antiguo 09/10/2016, 15:06
Avatar de hhs
hhs
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.739
Antigüedad: 3 años, 8 meses
Puntos: 326
Respuesta: Valor por defecto en Combo

http://symfony.com/doc/current/refer...tity.html#data
__________________
Saludos
A class should have only one reason to change.
Laraveles
  #3 (permalink)  
Antiguo 10/10/2016, 01:47
 
Fecha de Ingreso: mayo-2009
Mensajes: 727
Antigüedad: 7 años, 9 meses
Puntos: 6
Respuesta: Valor por defecto en Combo

Hola, gracias por tu respuesta, pero poniendo esto así:

Código PHP:
Ver original
  1. ->add('subequipos', 'entity', array(
  2.                 'label'                 => 'Nombre del Subequipo',
  3.                 'class'                 => 'IBSEquiposBundle:T_Subequipos',
  4.                 'data' => 'Aficionado A',
  5.                 'query_builder'         => function (EntityRepository $er) {
  6.                                            return $er->createQueryBuilder('r');
  7.                 },
  8.                 'choice_label'          => 'getEquiposNombreTuneado'))

El combo sigue devolviendo el mismo codigo html que puse.
  #4 (permalink)  
Antiguo 12/10/2016, 10:41
 
Fecha de Ingreso: octubre-2007
Mensajes: 215
Antigüedad: 9 años, 5 meses
Puntos: 3
Respuesta: Valor por defecto en Combo

Y por qué no los codificas en la base de datos de manera tal que Juvenil tome el id= 1, en definitivas es algún tipo de clasificador que me suena a una tabla de solo lectura.
En cualquier otro caso, mediante javascript pudieras establecer qué option de tu select será el seleccionado al cargar la vista, nop ?!?!?!?!
  #5 (permalink)  
Antiguo 13/10/2016, 02:29
 
Fecha de Ingreso: mayo-2009
Mensajes: 727
Antigüedad: 7 años, 9 meses
Puntos: 6
Respuesta: Valor por defecto en Combo

Cita:
Iniciado por X_fran Ver Mensaje
Y por qué no los codificas en la base de datos de manera tal que Juvenil tome el id= 1, en definitivas es algún tipo de clasificador que me suena a una tabla de solo lectura.
!
No entiendo nada de lo que has querido expresas con esto.

Cita:
Iniciado por X_fran Ver Mensaje
En cualquier otro caso, mediante javascript pudieras establecer qué option de tu select será el seleccionado al cargar la vista, nop ?!?!?!?!
Si, pero yo creo que symfony debe o debería de tener facilmente una opcion para ponerle un selected a un combo de forma facil, ya que es una operación relativamente habitual. ¿No te parece?
  #6 (permalink)  
Antiguo 13/10/2016, 13:01
 
Fecha de Ingreso: octubre-2007
Mensajes: 215
Antigüedad: 9 años, 5 meses
Puntos: 3
Respuesta: Valor por defecto en Combo

A lo que me refiero es, que si la entidad que deseas mostrar en el formulario representa algún tipo de clasificador que no cambian sus valores en la base de datos, pues insertalos en el orden :
1 Juvenil,
2 Aficionado A,
3 Aficionado B

De manera tal que al hacer la consulta para cargar el entity en el formulario te saldrá la opción Juvenil de primera, ya seleccionada. Esa es la manera más fácil en caso que la tabla sea de solo lectura (actue como clasificador y no se realizarán operaciones CRUD sobre ella).

Revisando la documentación en la direción que postea hhs, no encuentro nada que ayude a establecer un valor como el seleccionado.

Pudiera ser que en el action que renderiza (o crea) el formulario nuevo, le asignes a la entidad asociada al formulario el objeto traido desde la bd que te reprsenta la opción por defecto en el select.

digamos:
Código:
$em = $this->getDoctrine()->getEntityManager();
$subEquipoSel= $em->getRepository('AppBundle:T_Subequipos')->find(2);

$entidadForm = new T_Datosequipos();
$entidadForm->setSubEquipo($subEquipoSel);
$form=$this->createForm(new T_DatosequiposType(), $entidadForm, array(.....));

De todos modos, ahora es que estoy aprendiendo a trabajar con symfony2, es solo mi criterio. La solución que le encuentres compártela por favor, estoy seguro que me va a servir cuando llegue a los formularios.

Última edición por X_fran; 13/10/2016 a las 13:06
  #7 (permalink)  
Antiguo 31/10/2016, 04:14
 
Fecha de Ingreso: mayo-2009
Mensajes: 727
Antigüedad: 7 años, 9 meses
Puntos: 6
Respuesta: Valor por defecto en Combo

Al final he conseguido solucionarlo de esta forma:

Código PHP:
Ver original
  1. public function __construct($id) {
  2.     $this->id = $id;
  3.   }
  4.  
  5.     public function buildForm(FormBuilderInterface $builder, array $options)
  6.     {
  7.         $builder
  8.           ->add('subequipos', 'entity', array(
  9.                 'label'                 => 'Nombre del Subequipo',
  10.                 'class'                 => 'IBSEquiposBundle:T_Subequipos',
  11.                 'query_builder'         => function (EntityRepository $er) {
  12.                                            return $er->createQueryBuilder('r');
  13.                 },
  14.                   'choice_attr' => function($choice, $key, $value) {
  15.                     if($value == $this->id)
  16.                     {
  17.                       return ['selected' => 'selected'];
  18.                     }
  19.                     else
  20.                     {
  21.                       return ['value' => $value];
  22.                     }
  23.                   },
  24.                 'choice_label'          => 'getEquiposNombreTuneado'))



La zona horaria es GMT -6. Ahora son las 18:15.