如果你需要在symfony 2或3的自定义控制器中手动注册用户(无表单), 则只需访问控制器中的fos_user.user_manager服务即可。
你将要问自己, 为什么不简单地直接使用doctrine保留用户实体?答案很简单, 我们不想自己处理已经在FOSUserBundle中实现的加密内容。这就是为什么我们需要使用setPlainPassword方法访问服务。
【如何在Symfony中使用FOSUserBundle在自定义控制器中注册用户】注意:如果你不是从控制器手动实现用户插入, 则需要注入容器以便从任何位置检索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;
}}
推荐阅读
- 如何在Shopware中配置调试环境
- 如何解决symfony 3错误给出类型为”字符串”,”yourBundle/Form/xformType”的预期参数
- 未设置Symfony 2默认时区会在生产环境中导致致命错误
- 如何在Symfony 3表单内使用Twig检索EntityType字段的每个实体实例
- 如何使用Symfony 2和3返回xml或json响应
- 如何在php或symfony中使用jQuery ajax上传文件
- 如何使用请求ip免费检测php或javascript中访客的国家
- 如何使用tcpdf在Symfony 2和3中使用php创建pdf文件
- 程序员|手把手教你使用 Python 制作贪吃蛇游戏