Har*_*itz 49 dql symfony doctrine-orm
我正在使用Symfony2和doctrine 2开发一个应用程序.我想知道如何获得当前登录用户的ID.
Jak*_*las 131
当前的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;
}
}
Run Code Online (Sandbox Code Playgroud)
从2.6开始,您仍然可以像所有Symfony版本一样使用安全令牌存储.例如,在您的控制器中:
$user = $this->get('security.token_storage')->getToken()->getUser();
Run Code Online (Sandbox Code Playgroud)
请注意,此答案的下一部分中提到的Controller::getUser()快捷方式在Symfony 3中已弃用,并已在Symfony 4.0中删除
旧版Symfony版本
访问用户的最简单方法是扩展基本控制器,并使用快捷getUser()方法(在Symfony 4中删除):
$user = $this->getUser();
Run Code Online (Sandbox Code Playgroud)
从Symfony 2.6开始,您可以从安全令牌存储中检索用户:
$user = $this->get('security.token_storage')->getToken()->getUser();
Run Code Online (Sandbox Code Playgroud)
在Symfony 2.6之前,可以从安全上下文服务访问令牌:
$user = $this->get('security.context')->getToken()->getUser();
Run Code Online (Sandbox Code Playgroud)
请注意,安全上下文服务在Symfony 2中已弃用,并已在Symfony 3.0中删除.
53i*_*ott 16
在symfony2中,我们可以通过以下代码更简单:
$id = $this->getUser()->getId();
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用以下代码获取该变量:
$userId = $this->get('security.context')->getToken()->getUser()->getId();
Run Code Online (Sandbox Code Playgroud)