2012-05-14 16 views
7

En Symfony 1 había un widget de formulario llamado admin_double_list. Se generaron dos campos de selección llamados Unassociated y Associated. También generó botones para agregar elementos de una lista a otra.Symfony2 widgets de formulario para relaciones muchas-a-muchas

¿Hay alguna manera fácil de lograr esto en Symfony2? ¿O tal vez otra forma amigable para el usuario de editar relaciones de muchos a muchos?

En el documentation, solo hay cuatro widgets para relaciones muchos a muchos y ninguno de ellos es muy bueno cuando hay una gran cantidad de posibilidades de relación para editar.

Respuesta

14

Puede gestionar fácilmente las relaciones de varios a varios con entity form field. Por ejemplo, si User como una relación de muchos a muchos con Group, simplemente puede añadir al constructor:

$builder->add('groups', 'entity', array(
    'multiple' => true, // Multiple selection allowed 
    'expanded' => true, // Render as checkboxes 
    'property' => 'name', // Assuming that the entity has a "name" property 
    'class' => 'Acme\HelloBundle\Entity\Group', 
); 

Esto generará una lista casilla donde se marcan las entidades asociadas (revisados), mientras que no asociado no lo son. Configurando expanded a false puede renderizarlo como un elemento seleccionado (múltiple).

Si necesita personalizar la forma en que los grupos se recuperan también puede pasar una opción query_builder, ya sea QueryBuilder instancia o un cierre donde $er es el EntityRepository

'query_builder' => function(\Doctrine\ORM\EntityRepository $er) { 
    $qb = $er->createQueryBuilder('g'); 

    return $qb->orderBy('g.name', 'DESC); 
} 

Para mirada escenario más complejo también en collection form type, pero tienes que lidiar con jQuery/Javascript.

+0

El problema aquí es que habrá demasiadas casillas de verificación para que la página de edición sea utilizable y fácil de usar. Es por eso que estaba buscando algo similar a Symfony1. – teemup

+0

Eso hará por mí, por ahora. Esperaba encontrar una manera de 'ajax' para que un usuario pudiera presionar 'agregar otro' y obtener otra selección única, hasta que escogieran todas las asociaciones que querían, sin embargo. –

+0

Cómo cambiar la forma en que se muestra el campo MTM, por ejemplo: ¿muestra ids de entidades en una fila de casillas de verificación, en lugar de la columna predeterminada? – olga

Cuestiones relacionadas