注册时,我想检查另一个表是否存在他们的用户名,如果存在,则为该用户设置另一个角色。
我会在用户事件构造函数、监听器、注册 Controller 中执行此操作吗?我尝试了其中的几个,但实际上在访问实体管理器以查询表时遇到了问题
所以我想在用户注册(或确认他们的电子邮件)时(在某个地方)运行
$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();
现在我已经将实体管理器注入(inject)到我的服务中
app.registration_completed:
class: UserBundle\EventListener\RegistrationConfirmListener
arguments:
- "@doctrine.orm.entity_manager"
我的事件监听器如下
类 RegistrationConfirmListener 实现 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);
}
最佳答案
您已发布有问题的错误。我建议您始终与您尝试过的代码共享错误,以便其他人能够解决问题。
请尝试以下。
只需在服务中传递 doctrine
对象参数并在 __construct()
中设置实体管理器。
services.yml
app.registration_completed:
class: UserBundle\EventListener\RegistrationConfirmListener
arguments:
- "@doctrine"
RegistrationConfirmListener.php
class RegistrationConfirmListener implements EventSubscriberInterface {
protected $em;
function __construct(Doctrine $doctrine) // Get doctrine argument
{
$this->em = $doctrine->getEntityManager();
}
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);
}
}
它在 Symfony 2.3 中运行良好
关于php - Symfony FOSUserbundle - 在帐户创建时设置角色的最佳实践(使用数据库查询),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40499123/