Tengo 2 entidades: usuario y grupo. Tienen una relación de muchos a muchos y Group se usa para almacenar los roles de los usuarios.Symfony 2 Colección de formularios incrustados Muchos a muchos
que estoy tratando de hacer un formulario de edición del usuario mediante la adición de una colección, quiero ser capaz de añadir un nuevo papel seleccionándolo de una lista desplegable (limitado a lo que ya está en la base de datos)
UserType. php:
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username')
->add('email')
->add('forename')
->add('surname')
->add('isActive')
->add('joinDate', 'date', array('input' => 'datetime', 'format' => 'dd-MM-yyyy'))
->add('lastActive', 'date', array('input' => 'datetime', 'format' => 'dd-MM-yyyy'))
->add('groups', 'collection', array(
'type' => new GroupType(),
'allow_add' => true,
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Sfox\CoreBundle\Entity\User'
));
}
}
y GroupType.php:
class GroupType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('role');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
"data_class" => 'Sfox\CoreBundle\Entity\Group'
));
}
}
Esto muestra los papeles en forma de cuadros de texto básicos, pero si agrego una entrada a la forma, que caerá en cascada persistir una nueva ent en Grupos y si tuviera que editar una entrada, cambiaría los datos de Grupo subyacentes.
He intentado hacer una GroupSelectType.php:
class GroupSelectType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('role', 'entity', array('class'=>'SfoxCoreBundle:Group', 'property'=>'name'));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
"data_class" => 'Sfox\CoreBundle\Entity\Group'
));
}
}
Añadiendo el campo como un tipo de "entidad", esto muestra el cuadro de selección correcta (pero con los valores por defecto) Me parece que no puede obligar a la Forma de UserType!
Todo lo que quiero que haga la forma es modificar los 'grupos' subyacentes ArrayCollection en la entidad Usuario.
¿Alguien sabe cómo puedo lograr esto?
¡Esta respuesta me ayudó muchísimo! ¡Gracias! – jcbwlkr
¡Perfecto gracias! –
Muy útil. Gracias – Rinat