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(比方说, ),并且您想为 ID等于$currentUserId的所有用户编写查询?$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 回答