Как получить список пользователей с определенной ролью контроллера Symfony

Я новичок в 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 %}

Все, что я получаю, это пустая страница. Любая помощь будет оценена

3 ответа

Решение

Решаемые. На самом деле, используя PUGXMultiUserBundle, вы можете выбрать из определенной таблицы (вы можете связать тип пользователя с ролью), поэтому я изменил действие внутри контроллера следующим образом:

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

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

Работает как шарм. Надеюсь, это помогает кому-то.

Я пытаюсь сделать это и без 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();

Может быть, это поможет людям, которые находятся в таком же случае со мной.

У меня просто была та же проблема, что и у ОП. Фактически, вещь с приведенным выше фрагментом кода из OP - это двойные кавычки: ->setParameter('roles', '%"'.$role.'"%');Это не казалось правильным с первого взгляда. Изменился на: ->setParameter('roles', '%'.$role.'%'); и все работает отлично.

Вы пытались исправить эту строку:

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

От:

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

?

Ваш метод, кажется, ищет пользователей для ОДНОЙ роли. Условие LIKE ожидает строку, а не массив.

Тогда метод будет больше похож на findByRole(), а не findByRoles ().

Другие вопросы по тегам