Aprende a registrar un usuario con fosuserbundle en cualquier controlador (manualmente sin formularios predeterminados) en Symfony.

Si necesitas registrar un usuario manualmente (sin formularios) en un controlador personalizado en Symfony 2 o 3, solo necesitas tener acceso al  fos_user.user_manager servicio en tu controlador.

Te preguntarás, ¿por qué no persistir simplemente en una entidad de usuario directamente con la doctrina ? Y la respuesta es bastante simple, no queremos manejar por nuestra cuenta las cosas de cifrado que ya están implementadas en FOSUserBundle. Es por eso que necesitamos obtener acceso al servicio, para usar el método setPlainPassword .

Nota: Si no está implementando la inserción de un usuario manualmente desde un controlador, deberá inyectar el contenedor para poder recuperar el servicio fos_user desde donde se encuentre.

Ejemplo de inserción

class MyCustomuserController extends Controller
{
   public function registeruserAction(Request $request){
       $succesfullyRegistered = $this->register("[email protected]","demoUsername","demoPassword");

       if($succesfullyRegistered){
           // ¡el usuario ya está registrado!
       }else{
           // el usuario ya existe!
       }
   }
 
   /**
    * Este método registra a un usuario en la base de datos manualmente.
    *
    * @return boolean User registered / not registered
    **/
   private function register($email,$username,$password){    
      $userManager = $this->get('fos_user.user_manager');

      // O puede usar el administrador de entidades de doctrina si desea el administrador de fosuser
      // para encontrar
      //$em = $this->getDoctrine()->getManager();
      //$usersRepository = $em->getRepository("mybundleuserBundle:User");
      // or use directly the namespace and the name of the class 
      // $usersRepository = $em->getRepository("mybundle\userBundle\Entity\User");
      //$email_exist = $usersRepository->findOneBy(array('email' => $email));
      
      $email_exist = $userManager->findUserByEmail($email);

      // Verifique si el usuario existe para evitar el error de violación de restricción de integridad en la inserción
      if($email_exist){
          return false;
      }

      $user = $userManager->createUser();
      $user->setUsername($username);
      $user->setEmail($email);
      $user->setEmailCanonical($email);
      $user->setLocked(0); // no bloquees al usuario
      $user->setEnabled(1); // habilitar al usuario o habilitarlo más tarde con un token de confirmación en el correo electrónico
      // este método cifrará la contraseña con la configuración predeterminada :)
      $user->setPlainPassword($password);
      $userManager->updateUser($user);

      return true;
   }
}

Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores