如何获取具有特定角色symfony控制器的用户列表



我是symfony 2的新手,使用FOSUserBundle和PUGXMultiUserBundle,在检索具有特定角色的用户列表时遇到问题,例如:role_ADMINISTRATEUR,以通知他们一些事情。总之,受此启发,这是我的UserRepository类:

<?php
namespace OCUserBundleEntity;
use DoctrineORMEntityRepository;

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 %}

我得到的只是一页空白。如有任何帮助,将不胜感激

我尝试在没有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();

也许这可以帮助那些和我一样的人。

您是否尝试更正这一行:

$users=$repository2->findByRoles(array('roles'=>$roles));

签字人:

$users=$repository2->findByRoles('ROLE_ADMINISTRATEUR');

您的方法似乎是为一个角色搜索用户。LIKE条件需要一个字符串,而不是数组。

该方法将更像findByRole((,而不是findByRoles((

已解决。实际上,使用PUGXMultiUserBundle,您可以从一个特定的表中进行选择(您可以将一种类型的用户与一个角色关联起来(,所以我将控制器内部的操作更改为:

$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.'%');,一切正常。

相关内容

  • 没有找到相关文章

最新更新