我正在使用Symfony2和Doctrine 2开发一个应用程序,想知道如何获取当前已登录用户的ID。
当前的Symfony版本(Symfony 4,Symfony >=3.2)
自从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;
}
}
自从Symfony 2.6版本以来,您仍然可以像以前一样使用安全令牌存储。例如,在您的控制器中:
$user = $this->get('security.token_storage')->getToken()->getUser();
请注意,下一部分回答中提到的Controller::getUser()
快捷方式已不再被鼓励使用。
旧版Symfony
访问用户的最简单方法是扩展基本控制器并使用快捷方式getUser()
方法:
$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中删除。
$id = $this->getUser()->getId();
$userId = $this->get('security.context')->getToken()->getUser()->getId();
$userId
。 - GusDeCooL这可以在方法中实现:
/**
* 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());
}