Filtrar select FormBuilder

12 views
Skip to first unread message

Erick Hernandez

unread,
Aug 20, 2015, 10:05:05 PM8/20/15
to Symfony Madrid
Buenas, tengo una duda bastante grande.

Tengo mis usuarios desde la base de datos y los roles tambien, la relacion en la base de datos esta funcionando muy bien.

Mi problema es el siguiente, el FormBuilder lo tengo de la siguiente manera:

$form = $this->createFormBuilder($usuarios)
           
->add('nom', 'text')
           
->add('username', 'text')
           
->add('correo', 'email')
           
->add('password', 'repeated', array(
               
'type' => 'password',
               
'invalid_message' => 'Las dos contraseñas deben coincidir',
               
'required' => false,
               
))
           
->add('grupos')
           
->getForm();

Y el monta el select con los grupos (roles) pero hay roles que no quiero que sean visibles para todo el mundo sino solo para mi, o simplemente que no se puedan asignar desde el entorno web y que yo lo asigne desde la BD directamente, tal es el caso de un rol que se llama SUPER_ADMIN que como podran entender engloba todos los demas roles en la definicion de security.yml

En mis intentos por dar con la solucion lo hice de esta forma:

$form = $this->createFormBuilder($usu)
           
->add('nom', 'text')
           
->add('username', 'text')
           
->add('correo', 'email')
           
->add('password', 'repeated', array(
               
'type' => 'password',
               
'invalid_message' => 'Las dos contraseñas deben coincidir'
           
))
           
->add('grupos', 'entity', array(
               
'class'    => 'ErdeAdminBundle:Grupos',
               
'property' => 'nombre',
               
'multiple' => 'true',
               
'query_builder' => function(GruposRepository $ur) {
                   
return $ur->createQueryBuilder('u')
                       
->where('u.id > 1');
               
},
               
'required' => true,))
           
->getForm();

Y hace lo que quiero, cuando voy a agregar me filtra como yo quiero y no me trae los roles que no deseo mostrar, pero al momento de editar con ese mismo codigo no me trae los resultados ya seleccionados.
Si guarda bien la seleccion, pero cuando voy a editar no me trae lo que esta guardado en la base de datos.

Lo que quiero es una de dos cosas, o utilizar el primer codigo y aplicar algo para filtrar los resultados, o con el segundo que se muestre lo que trae desde la BD al momento de editar.

Sebastian Riquelme

unread,
Aug 21, 2015, 9:30:21 AM8/21/15
to Symfony Madrid
Estimado, 

yo lo tengo de esta forma, quizás te puede servir, saludos desde Chile.

if($this->authorizationChecker->isGranted('ROLE_ADMIN')) {
$builder
->add($builder->create('roles', 'entity', array(
'class'         =>'AppBundle:Rol',
'property'      =>'nombre',
'query_builder' =>function(){
return $this->em
->getRepository('AppBundle:Rol')
->createQueryBuilder('r')
->where('r.rol <> :super_admin')
->setParameter('super_admin',  Rol::ROLE_SUPER_ADMIN);
},
'multiple' => false,
))
->addModelTransformer($transformer)
)
;
}else if($this->authorizationChecker->isGranted('ROLE_SUPERVISOR')){
$builder
->add($builder->create('roles', 'entity', array(
'class'         =>'AppBundle:Rol',
'property'      =>'nombre',
'query_builder' =>function(){
return $this->em
->getRepository('CysGeurBundle:Rol')
->createQueryBuilder('r')
->where('r.rol = :ejecutivo')
->setParameter('ejecutivo',  Rol::ROLE_EJECUTIVO);
},
'multiple' => false,
'read_only' => true,
))
->addModelTransformer($transformer)
)
;
}

Takashi

unread,
Aug 21, 2015, 10:37:48 AM8/21/15
to symfony...@googlegroups.com
Lo intente de esa manera pero no me trae seleccionados los que ya tiene en la base de datos cuando voy a editar, el filtro si funciona y al momento de guardar guarda bien, pero al editar no me selecciona los que ya estan registrados sino que debo volver a seleccionar los permisos del usuario.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Erick Hernández
Ingeniero En Informática - Desarrollador Web
http://www.dragonrock.com.ve

--
Has recibido este mensaje porque estás suscrito a un tema del grupo "Symfony Madrid" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/symfony_madrid/G1hHYXGUnqk/unsubscribe.
Para anular la suscripción a este grupo y a todos sus temas, envía un correo electrónico a symfony_madri...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Takashi

unread,
Aug 21, 2015, 11:53:51 AM8/21/15
to symfony...@googlegroups.com
Disculpa, habia hecho mal las pruebas, lo volvi a hacer creando un usuario desde cero y ahora si me funciono, gracias por tu ayuda

~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Erick Hernández
Ingeniero En Informática - Desarrollador Web
http://www.dragonrock.com.ve

Reply all
Reply to author
Forward
0 new messages