6

システムのすべての管理者を表示するページをコーディングしました。私がやりたいことは、現在認証されているユーザーをリストから除外するようにクエリをカスタマイズすることです。
これで、コントローラーからを取得してエンティティ リポジトリに渡すことができることがわかりuser_idましたが、エンティティ リポジトリを介して直接アクセスする方法があるかどうか疑問に思っていました。

例えば:

use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\NoResultException;

use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;

class AdminUserRepository extends EntityRepository implements UserProviderInterface
{
   public function getAdmins($int = 10, $offset = 0, array $orderBy = array('admin_id', 'asc')){
        $admin_id = fetch the admin id ?;
        $query = $this->createQueryBuilder('admins')
            ->where("admins.admin_id != '".$admin_id."'")
            ->orderBy('admins.'.$orderBy[0], $orderBy[1])
            ->setFirstResult($offset)
            ->setMaxResults($int)
            ->getQuery()
            ->getResult();
        return $query;
   }
}
4

2 に答える 2

1

したがって、現在のユーザー ID (たとえば、 ) があり$currentUserId、IDが?$currentUserId

これを試して:

class SomeController
{
    public function someAction()
    {
        ...

        $qb = $userRepository->createQueryBuilder("user")
            ->where("user.id != ?1")
            ->setParameter(1, $currentUserId);

        $usersExcludingCurrent = $qb->getQuery()->getResult();

    ...
    }
}

編集

ああ、あなたの言っていることがわかります...

そうですね、リポジトリは、それ自体の外部にあるものに対して本当に盲目であるべきです。つまり、コンテナに対応していないため、現在のユーザーが誰であるかを認識できません。

私の提案は、特定のユーザーまたはユーザー ID を除くすべてを取得する機能をリポジトリに与えることです。何かのようなもの:

class AdminUserRepository extends EntityRepository implements UserProviderInterface
{
    public function getAllAdminsExcept($userId, $int = 10, $offset = 0, array $orderBy = array('admin_id', 'asc'))
        {
            ...
        }
}

そして、「現在のユーザー」ロジックをコントローラーに入れます。@securityと の両方にアクセスできるサービスを定義し、@doctrineそこにすべてのロジックを格納することもできます。あなたの呼びかけですが、セキュリティ サービスで何が起こっているかをリポジトリに絶対に知らせないでおくべきだと思います。

于 2012-12-07T00:47:05.683 に答える
-4

次の方法でユーザーオブジェクトを取得できます

public function indexAction()
{
    $user = $this->getUser();
}

Twig テンプレートによるトラフ コントローラーまたはビュー:

<p>Username: {{ app.user.username }}</p>

このサンプルはsymfony 2 docからのものです。

于 2012-12-07T00:40:42.783 に答える