如何在Symfony 3的存储库中获取当前用户?

时间:2016-05-05 01:52:53

标签: symfony

我使用symfony 3并尝试获取Entity Repository文件中的当前用户数据,但是当我使用$this->get('security.token_storage')->getToken()->getUser();时,会出现无法找到get function的错误消息 那么,怎么做呢? PS:如果在表单类型中,如何调用用户数据。 感谢。

3 个答案:

答案 0 :(得分:0)

实体存储库没有Container。您可以找到解决方案的方法(例如Symfony2: How to access to service from repository),但这不是最佳做法。存储库只有一个目标 - 使用数据库中的数据。您可以将用户对象作为方法的参数传递。

答案 1 :(得分:0)

存储库不应该知道用户。如果您需要用户信息,您应该制作如下方法:

class YourRepository
{
    public function findSomethingByUser(User $user)
    {
        $query = $this->getEntityManager()
            ->createQuery(
                'SELECT t FROM AppBundle:Table t '.
                'WHERE t.user > :user'
        )->setParameter('user', $user->getUsername());

        return $query->getResult();
    }
}

您可以在控制器中使用存储库:

class MyController
{
    public function someAction()
    {
        $user = $this->get('security.token_storage')
            ->getToken()
            ->getUser();

        $this->get('doctrine')
            ->getManager()
            ->getRepository('AppBundle:EntityName')
            ->findSomethingByUser($user);

        return new Response('foo');
    }
}

答案 2 :(得分:-1)

从 Symfony 3.4 开始,您可以使用安全实用程序类。这允许您检索实际用户。

use Symfony\Component\Security\Core\Security;
...
class YourRepository
{
    private $security;
    public function __construct(ManagerRegistry $registry,  Security $security)
    {
        parent::__construct($registry, Projekt::class);
         $this->security = $security;
    }
    
    public function findSomethingByUser(User $user)
    {
        $query = $this->getEntityManager()
            ->createQuery(
                'SELECT t FROM AppBundle:Table t '.
                'WHERE t.user > :user'
        )->setParameter('user', $this->security->getUser());

        return $query->getResult();
    }