交响乐2:使用 FOSUserBundle 时如何获取控制器内的用户对象?
-
11-12-2019 - |
题
我正在使用 FOSUserBundle 来验证我的用户。
我试图让控制器内的用户对象注册一个行程,我应该在保存之前将用户对象添加到此行程中。
我没有找到如何做到这一点,因为我在 symfony 文档中找到了下一个方法:
$user = $this->container->get('security.context')->getToken()->getUser();
将用户名呈现为字符串,但我需要整个对象。
目前,我使用这种方法,但它不能正常工作。
$username = $this->container->get('security.context')->getToken()->getUser();
$em = $this->container->get('doctrine')->getEntityManager();
$user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);
我怎样才能正确地做到这一点?
解决方案
其他提示
getUser
方法的文档表示:
返回实现__tostring()的对象,或返回原始字符串。
解决方案:
$userManager = $this->container->get('fos_user.user_manager');
$user = $userManager->findUserByUsername($this->container->get('security.context')
->getToken()
->getUser())
. 在 FOSUser 1.3 中你不能直接调用 $this->getUser
在安全控制器中。
你必须打电话 $this->container->get('security.context')->getToken()->getUser();
这足以访问用户对象。无需打电话 $user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);
此外你的 find
方法自动并隐式地将您的初始 $username 对象转换为字符串,因为它不等待对象作为参数。
我有同样的问题,解决它在您的使用中添加FOS类I.e:
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\GetResponseUserEvent;
use FOS\UserBundle\Model\UserInterface;
. 在symfony>= 3.2,文档状态:
在控制器中获取当前用户的替代方法是 type-hint与 UserInterface (并默认它 如果登录为可选的,则为null):
.use Symfony\Component\Security\Core\User\UserInterface\UserInterface; public function indexAction(UserInterface $user = null) { // $user is null when not logged-in or anon. }
这仅适用于不扩展的经验开发人员 来自 symfony base controller 和don' t使用 controllertrait 任何一个。否则,建议继续使用getUser() 快捷方式。
for fosuser ^ 1.3您可以从一个控制器内部获取当前用户,该控制器扩展如下:
$user = $this->container->get('security.token_storage')->getToken()->getUser();
. public function indexAction()
{
/* @var $user \FOS\UserBundle\Model\UserInterface */
if ($user = $this->getUser())
{
echo '<pre>';
print_r($user);
print_r($user->getRoles()); // method usage example
exit;
return $this->redirectToRoute('dashboard');
}
return $this->redirectToRoute('login');
}
.