Hola, en el controlador de registro de usuarios busco por nombre el rol ROLE_USER y lo añado al usuario nuevo después de haber hecho un persist y un flush pero en la base de datos en la tabla que relaciona los id de usuario con los roles nunca aparece la relacion entre el nuevo usuario y su rol, el codigo del controlador es:
public function registeruserAction()
{
$em = $this->getDoctrine()
->getManager();
$user = new Username();
$form = $this->createFormBuilder($user)
->add('name', 'text')
->add('lastname', 'text')
->add('email', 'email')
->add('username', 'text')
->add('password', 'password')
->getForm();
$request = $this->getRequest();
if ($request->getMethod() == 'POST') {
$form->bind($request);
if ($form->isValid()) {
$newsalt = sha1(mt_rand());
$testuser = $em->getRepository('CompartidaCompartidaBundle:Usernam e')->findOneBySalt($newsalt);
while($testuser){
$newsalt = sha1(mt_rand());
$testuser = $em->getRepository('CompartidaCompartidaBundle:Usernam e')->findOneBySalt($newsalt);
}
$user->setSalt($newsalt);
$activateid = urlencode(base64_encode($user->getSalt()));
$factory = $this->get('security.encoder_factory');
$encoder = $factory->getEncoder($user);
$pase = $encoder->encodePassword($user->getPassword(), $user->getSalt());
$user->setPassword($pase);
$user->setIsActive(false);
$em->persist($user);
$em->flush();
// AQUI SE ASIGNA EL ROL
$rol = $em->getRepository('CompartidaCompartidaBundle:Role' )->findOneByName('ROLE_USER');
$user = $em->getRepository('CompartidaCompartidaBundle:Usernam e')->find($user->getId());
$user->addRol($rol);
$em->flush();
// Envia un correo de activacion
$message = \Swift_Message::newInstance()
->setSubject('Activar usuario de compartida.es')
->setFrom('
[email protected]')
->setTo($user->getEmail())
->setBody("Active su cuenta de compartida.es en la siguiente url: http://www.compartida.es/activate/$activateid"
// $this->renderView(
// 'HelloBundle:Hello:email.txt.twig',
// array('name' => $name)
// )
);
$this->get('mailer')->send($message);
// Redirige - Esto es importante para prevenir que el usuario
// reenvíe el formulario si actualiza la página
return $this->redirect($this->generateUrl('CompartidaCompartidaBundle_homepage' ));
}
}
return $this->render('CompartidaCompartidaBundle:Admin:register user.html.twig', array(
'form' => $form->createView()
));
}