0

我是 symfony 2 的新手,与 FOSUserBundle 和 PUGXMultiUserBundle 一起工作,我在检索具有特定角色的用户列表时遇到了麻烦,例如:ROLE_ADMINISTRATEUR 通知他们一些事情。无论如何,受此启发,是我的 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

4 回答 4

2

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

也许这可以帮助和我有同样情况的人。

于 2020-02-19T11:28:31.033 回答
0

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

于 2017-03-25T14:54:35.867 回答
0

您是否尝试更正此行:

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

经过 :

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

?

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

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

于 2015-07-30T11:35:45.423 回答
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));

奇迹般有效。希望这可以帮助某人。

于 2015-07-31T00:28:30.890 回答