0

私はsymfony 2を初めて使用し、PUGXMultiUserBundleとともにFOSUserBundleを使用しています.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

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 に答える
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 条件では、配列ではなく文字列が必要です。

このメソッドは、 findByRoles() ではなく、 findByRole() に似ます

于 2015-07-30T11:35:45.423 に答える