我正在使用Symfony2和doctrine 2开发应用程序。我想知道如何获取当前登录用户的ID。
答案 0 :(得分:129)
目前的Symfony版本(Symfony 4,Symfony> = 3.2)
Since Symfony >=3.2您可以简单地期望将UserInterface
实现直接注入您的控制器操作。然后,您可以调用getId()
来检索用户的标识符:
class DefaultController extends Controller
{
// when the user is mandatory (e.g. behind a firewall)
public function fooAction(UserInterface $user)
{
$userId = $user->getId();
}
// when the user is optional (e.g. can be anonymous)
public function barAction(UserInterface $user = null)
{
$userId = null !== $user ? $user->getId() : null;
}
}
自2.6以来,您仍然可以像所有Symfony版本一样使用安全令牌存储。例如,在您的控制器中:
$user = $this->get('security.token_storage')->getToken()->getUser();
请注意,本答案下一部分中提到的Controller::getUser()
快捷方式在Symfony 3中已弃用,已在Symfony 4.0中删除
Legacy Symfony版本
访问用户的最简单方法是扩展基本控制器,并使用快捷方式getUser()
方法(在Symfony 4中删除):
$user = $this->getUser();
自 Symfony 2.6 以来,您可以从安全令牌存储中检索用户:
$user = $this->get('security.token_storage')->getToken()->getUser();
在Symfony 2.6之前,可以从安全上下文服务访问该令牌:
$user = $this->get('security.context')->getToken()->getUser();
请注意,安全上下文服务在Symfony 2中已弃用,并已在Symfony 3.0中删除。
答案 1 :(得分:16)
在symfony2中,我们可以通过以下代码更简单:
$id = $this->getUser()->getId();
答案 2 :(得分:3)
您可以使用以下代码获取变量:
$userId = $this->get('security.context')->getToken()->getUser()->getId();
答案 3 :(得分:0)
这可以穿着方法:
/**
* Get user id
* @return integer $userId
*/
protected function getUserId()
{
$user = $this->get('security.context')->getToken()->getUser();
$userId = $user->getId();
return $userId;
}
感应$ this-> getUserId()
public function example()
{
print_r($this->getUserId());
}
答案 4 :(得分:0)
通过用户名查找:
public function getLoggedUser()
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
return $this->getUser();
}
然后
$this->getLoggedUser()->getUsername() will return the username.