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