Symfony FosUserBundle仅显示角色==角色\用户的用户
我正在尝试获取唯一具有Symfony FosUserBundle仅显示角色==角色\用户的用户,symfony,orm,doctrine,fosuserbundle,Symfony,Orm,Doctrine,Fosuserbundle,我正在尝试获取唯一具有角色的用户\u user 我的控制器中有: $query = $this->getDoctrine()->getEntityManager() ->createQuery( 'SELECT u FROM StageUserBundle:User u WHERE u.roles LIKE :role' )->setParameter('role', '%"ROLE_USER"%' ); $users = $query->getR
角色的用户\u user
我的控制器中有:
$query = $this->getDoctrine()->getEntityManager()
->createQuery(
'SELECT u FROM StageUserBundle:User u WHERE u.roles LIKE :role'
)->setParameter('role', '%"ROLE_USER"%'
);
$users = $query->getResult();
它使用的是
ROLE\u ADMIN
而不是ROLE\u USER
,但是我只需要显示USER.getRoles()==“ROLE\u USER”
,您的问题是FOSUserBundle中的用户模型实际上从来没有ROLE\u USER
FOS\UserBundle\Model\UserInterface
FOS\UserBundle\Model\User
当您getRoles
时,它会添加ROLE\u用户
作为默认值,当您addRole
时,它会检查角色是否为ROLE\u用户
,如果是,则跳过
实际上,您系统上的每个用户都将拥有
角色\u user
,因此要查找具有该角色的所有用户,您只需执行从StageUserBundle中选择u即可。用户名:user u
我找到了问题的解决方案。
我在控制器中更改了此选项:
$query = $this->getDoctrine()->getEntityManager()
->createQuery('SELECT u FROM StageUserBundle:User u WHERE NOT u.roles LIKE :role'
)->setParameter('role', '%"ROLE_ADMIN"%' );
$users = $query->getResult();
希望这会有所帮助
public function addRole($role)
{
$role = strtoupper($role);
if ($role === static::ROLE_DEFAULT) {
return $this;
}
if (!in_array($role, $this->roles, true)) {
$this->roles[] = $role;
}
return $this;
}
....
public function getRoles()
{
$roles = $this->roles;
foreach ($this->getGroups() as $group) {
$roles = array_merge($roles, $group->getRoles());
}
// we need to make sure to have at least one role
$roles[] = static::ROLE_DEFAULT;
return array_unique($roles);
}
$query = $this->getDoctrine()->getEntityManager()
->createQuery('SELECT u FROM StageUserBundle:User u WHERE NOT u.roles LIKE :role'
)->setParameter('role', '%"ROLE_ADMIN"%' );
$users = $query->getResult();