我正在使用 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);

我怎样才能正确地做到这一点?

有帮助吗?

解决方案

我认为拉蒙是对的。您已经拥有了用户对象。

也在symfony> 2.1.x中,您可以使用

$this->getUser();
.

在控制器内。

其他提示

解决方案:

$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;
.

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');
}
.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top