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

时间:2015-07-30 11:24:24

标签: symfony doctrine-orm fosuserbundle pugxmultiuserbundle

我是symfony 2的新手,与FOSUserBundle和PUGXMultiUserBundle一起工作,我在查找具有特定角色的用户列表时遇到了麻烦,例如:ROLE_ADMINISTRATEUR通知他们某些事情。无论如何,受this的启发,这是我的UserRepository类:

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

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

4 个答案:

答案 0 :(得分:1)

我也尝试不使用具有以下功能的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();

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

答案 1 :(得分:0)

您是否尝试更正此行:

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

通过:

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

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

该方法更像是 findByRole()而不是 findByRoles()

答案 2 :(得分:0)

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

$em=$this->getDoctrine()->getManager();
$repository2=$em->getRepository('OCUserBundle:UserAdministrateur');
$admins=$repository2->findAll();

Return $this->render('OCUserBundle:Default:test.html.twig',array(
    'admins'=>$admins));

像魅力一样工作。 HOpe这对某人有帮助。

答案 3 :(得分:0)

我遇到与OP相同的问题。实际上OP上面的代码片段是双引号:->setParameter('roles', '%"'.$role.'"%'); 从第一眼看起来这些似乎并不正确。更改为:->setParameter('roles', '%'.$role.'%');,一切正常。