注册时,我想检查另一个表,如果他们的用户名存在,并且如果有,请为该用户设置另一个角色。Symfony FOSUserbundle - 创建帐户角色的最佳实践(使用db查询)
我会在用户事件构造函数,监听器,注册控制器中执行此操作吗?我尝试了这些,但有问题的实际访问实体管理器来查询表
那么我现在想运行(的地方),当用户正在注册(或确认他们的电子邮件)
$em = $this->getDoctrine()->getEntityManager();
$uniID = preg_replace('/\D/', '', $user->getUsername());
if ($em->getRepository('AppBundle:User')->userHasMembership($uniID) == 1) {
$user->addRole('ROLE_MEMBER');
} else {
$user->removeRole('ROLE_MEMBER');
}
$em->persist($user);
$em->flush();
现在我已经注入实体管理器为我服务
app.registration_completed:
class: UserBundle\EventListener\RegistrationConfirmListener
arguments:
- "@doctrine.orm.entity_manager"
我的事件监听器是以下
类RegistrationConfirmListener IM补充(9.3)EventSubscriberInterface {
protected $em;
function __construct(EntityManager $em)
{
$this->em = $em;
}
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::REGISTRATION_CONFIRM => 'onRegistrationConfirm'
);
}
public function onRegistrationConfirm(GetResponseUserEvent $event)
{
$user = $event->getUser();
$uniID = preg_replace('/\D/', '', $user->getUsername());
if ($this->em->getRepository('AppBundle:User')->userHasMembership($uniID) == 1) {
$roles = array('ROLE_USER', 'ROLE_MEMBER');
} else {
$roles = array('ROLE_USER');
}
$user->setRoles($roles);
}
我可能会做它在登记控制器(除非有是用户可以注册的其他地方吗?)。你对EntityManager有什么样的麻烦? – Rhono
就像这个例子? http://symfony.com/doc/current/bundles/FOSUserBundle/overriding_controllers.html – p3tch