如何获取具有特定角色 symfony 控制器的用户列表
How to get a list of users with specific role symfony controller
我是 symfony 2 的新手,正在使用 FOSUserBundle 和 PUGXMultiUserBundle,我在检索具有特定角色的用户列表时遇到了麻烦,例如:ROLE_ADMINISTRATEUR 通知他们一些事情。无论如何,受到 this 的启发,这是我的 UserRepository class:
<?php
namespace OC\UserBundle\Entity;
use Doctrine\ORM\EntityRepository;
class UserRepository extends EntityRepository
{
public function findByRoles($role)
{
$qb = $this->_em->createQueryBuilder();
$qb->select('u')
->from('OCUserBundle:User', 'u')
->where('u.roles LIKE :roles')
->setParameter('roles', '%"'.$role.'"%');
return $qb->getQuery()->getResult();
}
}
这是控制器操作中的代码:
$em=$this->getDoctrine()->getManager();
$repository2=$em->getRepository('OCUserBundle:User');
$roles='ROLE_ADMINISTRATEUR';
$users=$repository2->findByRoles(array('roles'=>$roles));
Return $this->render('OCUserBundle:Default:test.html.twig',array(
'users'=>$users));
和我的 test.html.twig 页面:
{% for a in users %}
{{a.username}}
{% endfor %}
我得到的只是一个空白页面。任何帮助将不胜感激
您是否尝试过更正此行:
$users=$repository2->findByRoles(array('roles'=>$roles));
作者:
$users=$repository2->findByRoles('ROLE_ADMINISTRATEUR');
?
您的方法似乎是在用户中搜索一个角色。 LIKE 条件需要一个字符串而不是一个数组。
该方法将更像 findByRole() 而不是 findByRoles().
已解决。实际上,使用 PUGXMultiUserBundle,您可以从特定的 table select,(您可以将一种类型的用户与角色相关联)所以我将控制器内的操作更改为:
$em=$this->getDoctrine()->getManager();
$repository2=$em->getRepository('OCUserBundle:UserAdministrateur');
$admins=$repository2->findAll();
Return $this->render('OCUserBundle:Default:test.html.twig',array(
'admins'=>$admins));
很有魅力。希望这对某人有所帮助。
我刚刚遇到了与 OP 相同的问题。实际上,来自 OP 的上述代码是双引号:->setParameter('roles', '%"'.$role.'"%');
乍一看,这些似乎不对。更改为:->setParameter('roles', '%'.$role.'%');
并且一切正常。
我也尝试在没有 PUGXMultiUserBundle 的情况下使用以下功能执行此操作:
$users = $repositoryUser->findByRoles("ROLE_SUPER_ADMIN");
但是它不起作用我得到一个空数组,所以我手动完成:
$qb = $em->createQueryBuilder();
$qb->select('u') ->from('AppBundle:User', 'u') ->where('u.roles LIKE :roles') ->setParameter('roles', '%"'."ROLE_SUPER_ADMIN".'"%');
$users = $qb->getQuery()->getResult();
也许这可以帮助到和我有同样情况的人。
我是 symfony 2 的新手,正在使用 FOSUserBundle 和 PUGXMultiUserBundle,我在检索具有特定角色的用户列表时遇到了麻烦,例如:ROLE_ADMINISTRATEUR 通知他们一些事情。无论如何,受到 this 的启发,这是我的 UserRepository class:
<?php
namespace OC\UserBundle\Entity;
use Doctrine\ORM\EntityRepository;
class UserRepository extends EntityRepository
{
public function findByRoles($role)
{
$qb = $this->_em->createQueryBuilder();
$qb->select('u')
->from('OCUserBundle:User', 'u')
->where('u.roles LIKE :roles')
->setParameter('roles', '%"'.$role.'"%');
return $qb->getQuery()->getResult();
}
}
这是控制器操作中的代码:
$em=$this->getDoctrine()->getManager();
$repository2=$em->getRepository('OCUserBundle:User');
$roles='ROLE_ADMINISTRATEUR';
$users=$repository2->findByRoles(array('roles'=>$roles));
Return $this->render('OCUserBundle:Default:test.html.twig',array(
'users'=>$users));
和我的 test.html.twig 页面:
{% for a in users %}
{{a.username}}
{% endfor %}
我得到的只是一个空白页面。任何帮助将不胜感激
您是否尝试过更正此行:
$users=$repository2->findByRoles(array('roles'=>$roles));
作者:
$users=$repository2->findByRoles('ROLE_ADMINISTRATEUR');
?
您的方法似乎是在用户中搜索一个角色。 LIKE 条件需要一个字符串而不是一个数组。
该方法将更像 findByRole() 而不是 findByRoles().
已解决。实际上,使用 PUGXMultiUserBundle,您可以从特定的 table select,(您可以将一种类型的用户与角色相关联)所以我将控制器内的操作更改为:
$em=$this->getDoctrine()->getManager();
$repository2=$em->getRepository('OCUserBundle:UserAdministrateur');
$admins=$repository2->findAll();
Return $this->render('OCUserBundle:Default:test.html.twig',array(
'admins'=>$admins));
很有魅力。希望这对某人有所帮助。
我刚刚遇到了与 OP 相同的问题。实际上,来自 OP 的上述代码是双引号:->setParameter('roles', '%"'.$role.'"%');
乍一看,这些似乎不对。更改为:->setParameter('roles', '%'.$role.'%');
并且一切正常。
我也尝试在没有 PUGXMultiUserBundle 的情况下使用以下功能执行此操作:
$users = $repositoryUser->findByRoles("ROLE_SUPER_ADMIN");
但是它不起作用我得到一个空数组,所以我手动完成:
$qb = $em->createQueryBuilder();
$qb->select('u') ->from('AppBundle:User', 'u') ->where('u.roles LIKE :roles') ->setParameter('roles', '%"'."ROLE_SUPER_ADMIN".'"%');
$users = $qb->getQuery()->getResult();
也许这可以帮助到和我有同样情况的人。