Tengo una lista desplegable en mi formulario Symfony2 como este:

$builder->add('categories','entity', array(
            'class'     => 'MyBundle:Myentity',
            'property'  => 'name',
            'label'     => 'Mylabel',
            'expanded'  => false,
            'multiple'  => false,
            'label_attr'   =>  array ( 'class'      => 'control-label' ),
            'attr'   =>  array  (   'class'         => 'form-control',
                                    'placeholder'   => 'Placeholder',
                                    'title'         => "Mytitle",
                                    'data-toggle'   => 'tooltip',
                                    'data-myidfromDB'   => '????',
                                    'data-mynamefromDB'=>'????' etc. )));

Así que obtengo una lista de objetos MyBundle: Myentity y cuando elijo uno quiero mostrar todas sus propiedades (como ID, nombre, etc.) que están almacenadas en mi base de datos y descritas en la clase Entity, en diferentes datos html- * campos. Si selecciono otro de la lista, quiero ver toda la información relacionada con mi opción recién seleccionada en HTML (para cambiar dinámicamente). ¿Alguna idea de cómo hacer eso?

3
Jack 29 ene. 2016 a las 16:40

2 respuestas

La mejor respuesta

Desde Symfony 2.7, puede establecer la opción choice_attr en ChoiceType y establecerla como un invocable que reciba la opción como argumento.

EntityType hereda esta opción y la elección en ese caso es la entidad instanciada, por lo que puede escribir algo como:

$builder->add('categories','entity', array(
    'class' => 'MyBundle:MyEntity',
    'property' => 'name',
    'label' => 'Mylabel',
    'attr' => array('class' => 'form-control'),
    'label_attr' => array('class' => 'control-label'),
    'choice_attr' => function (\AppBundle\Entity\MyEntity $myEntity) {
        return array(
            'data-private-property' => $entity->getPrivateProperty(),
            'data-some-value' => $entity->someMethod(),
        );
    },
);
1
Heah 31 ene. 2016 a las 23:20

No puedes hacer eso de una manera fácil. Pero puede poner más información en la etiqueta de selección.

Buscar en http://symfony.com/doc/current/reference /forms/types/entity.html#choice-label

Puede poner aquí más detalles de campo y obtenerlos de su javascript.

0
Andrzej Piszczek 29 ene. 2016 a las 14:11