如何在存储库Symfony 2.7中获取当前用户

Pla*_*er1 2 entity repository symfony symfony-2.7

我在Entity Repository中的所有查询都需要由用户进行过滤.

现在我想知道如何直接访问Entity Repository中当前登录的用户.

我今天所做的是通过使用$ this-> getUser()将当前登录的用户放入我的控制器中,然后将其传递给Entity Repository,这样效率不高.

xur*_*d29 8

你需要将security.token_storage服务注入另一个以获得当前用户,但是从Repository类到属于Doctrine项目,而不是Symfony,不建议这样做.可能有一种方法可以通过创建自定义entityManager类来实现它描述在这里,但我不认为它会很好的解决方案..

而不是定制entityManager更好的创建调用存储库类的方法的服务,将所需的服务注入其中.让存储库类完成它们的工作.

实现将是这样的:

RepositoryClass:

class MyRepository extends EntityRepository
{
    public function fetchSomeDataByUser(UserInterface $user)
    {
        // query
    } 
}
Run Code Online (Sandbox Code Playgroud)

服务:

class MyService
{
    private $tokenStorage;

    public function _construct(TokenStorageInterface $tokenStorage)
    {
        $this->tokenStorage = $tokenStorage;
        // other services
    }

    public function getSomeDataByUser()
    {
        $user = $this->tokenStorage->getToken()->getUser();

        return $this->entityManager->getRepository(MyREPOSITORY)->fetchSomeDataByUser($user);
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

public function someAction()
{
    $dataByUser = $this->get(MYSERVICE)->getSomeDataByUser();
}
Run Code Online (Sandbox Code Playgroud)