Как зарегистрировать пользователя в пользовательском контроллере с помощью FOSUserBundle в Symfony

Если вам нужно зарегистрировать пользователя вручную (без форм) в пользовательском контроллере в symfony 2 или 3, вам нужен только доступ к fos_user.user_manager сервис в вашем контроллере.

Вы спросите себя, почему бы просто не сохранить сущность пользователя непосредственно с доктриной? И ответ довольно прост, мы не хотим самостоятельно обрабатывать шифрование, которое уже реализовано в FOSUserBundle. Вот почему нам нужно получить доступ к сервису, чтобы использовать метод setPlainPassword.

Примечание. Если вы не реализуете вставку пользователя вручную из контроллера, вам необходимо внедрить контейнер, чтобы получить службу fos_user, где бы вы ни находились.

Пример вставки

class MyCustomuserController extends Controller
{
public function registeruserAction(Request $request){
$succesfullyRegistered = $this->register("demo@email.com","demoUsername","demoPassword");
if($succesfullyRegistered){
// the user is now registered !
}else{
// the user exists already !
}
}
/**
* This method registers an user in the database manually.
*
* @return boolean User registered / not registered
**/
private function register($email,$username,$password){
$userManager = $this->get('fos_user.user_manager');
// Or you can use the doctrine entity manager if you want instead the fosuser manager
// to find
//$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);
// Check if the user exists to prevent Integrity constraint violation error in the insertion
if($email_exist){
return false;
}
$user = $userManager->createUser();
$user->setUsername($username);
$user->setEmail($email);
$user->setEmailCanonical($email);
$user->setLocked(0); // don't lock the user
$user->setEnabled(1); // enable the user or enable it later with a confirmation token in the email
// this method will encrypt the password with the default settings :)
$user->setPlainPassword($password);
$userManager->updateUser($user);
return true;
}
}
Ссылка на основную публикацию
Adblock
detector