Pla*_*er1 2 entity repository symfony symfony-2.7
我在Entity Repository中的所有查询都需要由用户进行过滤.
现在我想知道如何直接访问Entity Repository中当前登录的用户.
我今天所做的是通过使用$ this-> getUser()将当前登录的用户放入我的控制器中,然后将其传递给Entity Repository,这样效率不高.
你需要将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)
| 归档时间: |
|
| 查看次数: |
7064 次 |
| 最近记录: |