我正在开发使用Symfony2中和学说2.我想知道如何才能得到当前登录的用户ID的应用程序。
Answer 1:
当前的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 3已被弃用,在Symfony的4.0移除
传统的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已被删除。
Answer 2:
在Symfony2中,我们可以得到这个代码的简单:
$id = $this->getUser()->getId();
Answer 3:
你可以用下面的代码的变量:
$userId = $this->get('security.context')->getToken()->getUser()->getId();
Answer 4:
这可以穿好衣服的方法:
/**
* Get user id
* @return integer $userId
*/
protected function getUserId()
{
$user = $this->get('security.context')->getToken()->getUser();
$userId = $user->getId();
return $userId;
}
而感应$这个 - > getUserId()
public function example()
{
print_r($this->getUserId());
}
文章来源: Symfony getting logged in user's id