Me pasa lo mismo que un usuario del foro que publicó esto:
He implementado FOSUserBundle, y quiero agregarle al RegisrationFormType
los roles que sean tomados de una tabla. Al momento lo tenía asi:
->add('roles', 'choice', array('label' => 'Rol', 'required' => true, 'choices' => array( 'ROLE_ADMIN' => 'ADMINISTRADOR','ROLE_SUPERADMIN' => 'SUPERADMINISTRADOR', 'ROLE_USER' => 'USUARIO'), 'multiple' => true))
¡Y funciona! Pero deben salir de la BD, no le puedo poner el campo Entity
porque roles debe ser un array, no un objeto. ¿Cómo puedo generar el array con los roles tomados de una tabla? ¿En FosUSerbundle como le debería agregar los roles?
Gracias ....
Lo escribo porque este usuario no tuvo respuesta.
He seguido [los pasos de la documentacion oficial](https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/index.md ) y agregando las líneas de arriba en el register
del FOSUserBundle funciona, pero quiero poder trabajar esto desde la base de datos.
Y luego para crear grupos utilicé esto. Se crearon dos tablas adicionales e incluso ya ingresé un grupo o rol en la lista, pero no se cómo mostrarlo en el login para registrar un nuevo usuario.
¿Alguien lo ha solucionado?
Respuestas
Hola , no se si resolviste tu problema. Vi esto en un foro, aun no lo he intentado, espero sea de ayuda.
http://stackoverflow.com/questions/28439512/add-roles-field-to-fosuserbundle-group-form-solved
@miguelplazasr
A mi me ha funcionado invirtiendo choices:
->add('roles', 'choice', array( 'label' => 'Rol', 'required' => true, 'choices' => array( 'Administrador' => 'ROLE_ADMIN', 'Superadministrador' => 'ROLE_SUPER_ADMIN', 'Usuario' => 'ROLE_USER'), 'multiple' => true))
Conserva el campo de roles igual que si se introdujeran los usuarios por terminal:
username | roles |
---|---|
admin | a:1:{i:0;s:10:"ROLE_ADMIN";} |
testuser | a:1:{i:0;s:10:"ROLE_ADMIN";} |
aaa | a:0:{} |
EDIT:
Indagando un poco más he encontrado una forma mejor de hacerlo (sin hardcode):
->add('roles', 'choice', array( 'label' => 'Rol', 'required' => true, 'choices' => $this->getExistingRoles(), 'multiple' => true)) // debajo de todas la funciones configure...() añado la funcion getExistingRoles() : public function getExistingRoles() { // sintaxis dentro de admin class: $roleHierarchy = $this->getConfigurationPool()->getContainer()->getParameter('security.role_hierarchy.roles'); // sintaxis dentro de un controlador: // $roleHierarchy = $this->container->getParameter('security.role_hierarchy.roles'); $roles = array_keys($roleHierarchy); $theRoles = array(); foreach ($roles as $role) { $theRoles[$role] = $role; } return $theRoles; }
@LauraLoopback